
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.233.221.90] |
![]() |
|
Сообщ.
#1
,
|
|
|
Господа!
В Microsoft Java VM есть досадная ошибка: .... double d = 0.5 + 0.59; if ( d == 1.09 ) .... // условие не выполняется .... Так вот, господа, НЕ РАВНО! Вообще это очень скверно, поскольку везде приходится "изощряться". Вопрос: кто еще сталкивался с этой проблемой и как с ней боролся? |
Сообщ.
#2
,
|
|
|
На SUN JDK 1.3.1 это равно 1.0899999999999999
Это не баг - это фича :D Если нужны точные значения используй BigDecimal, для этого он и создавался. java.math.BigDecimal x = new java.math.BigDecimal("0.5"); java.math.BigDecimal y = new java.math.BigDecimal("0.59"); System.out.println(x.add(y)); Ява не может представить Double абсолютно точно, это связано со внутренней структурой типа. Поэтому кстати в конструкторе BigDecimal не рекомендуется юзать дабл (хоть это и возможно), ты получишь ту же фигню. RTFM. |
Сообщ.
#3
,
|
|
|
Спасибо за ответ.
В принципе конечно огорчительно, но радует то, что эта "фича" существует в различных реализациях ;o) У меня есть набор функций в С++, которые я экспортировал в Java для работы с double. Решение работает, но "червь сомнения" не давал покоя. Еще раз спасибо. |