Почему в ColdFusion 0,06 + 0,01 = 0,07? - PullRequest
28 голосов
/ 15 сентября 2011

Почему математические операции в ColdFusion не подвержены математическим проблемам с плавающей запятой? Возьми код:

result = 0.06 + 0.01;

writedump(result);
writedump(result.getClass().getName());

Какие выходы

0,07

java.lang.Double

Однако эквивалентный Java-код выдает то, что я ожидал при добавлении двух значений типа double:

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 Ответ

37 голосов
/ 15 сентября 2011

Я сильно подозреваю, что это просто по-другому округляется на выводе . Другими словами, проблема все еще существует - она ​​просто не появляется, когда это конкретное значение распечатывается с writedump.

Что произойдет, если вы используете:

writedump(String.valueOf(result));

...