Почему 0.06 + 0.01 = 0.07 в ColdFusion?
Почему математические операции в ColdFusion не влияют на математические проблемы с плавающей запятой? Возьмите код:
result = 0.06 + 0.01;
writedump(result);
writedump(result.getClass().getName());
Какие выходы
0,07
java.lang.Double
Однако эквивалентный код Java создает то, что я ожидаю при добавлении двух парных номеров:
public static void main(String[] args) {
double a = 0.01d;
double b = 0.06d;
System.out.println(a + b); //0.06999999999999999
}
Это то, что я ожидал увидеть от ColdFusion из-за реалий плавающей математики (http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html).
Делает ли ColdFusion "волшебство" за кулисами или я смотрю на изолированную аномалию здесь?
Ответы
Ответ 1
Я сильно подозреваю, что он просто округляет по-разному на выходе. Другими словами, проблема все еще существует - она просто не появляется, когда это конкретное значение распечатывается с помощью writedump
.
Что произойдет, если вы используете:
writedump(String.valueOf(result));
?