Почему я вижу двойную переменную, инициализированную некоторым значением, таким как 21.4, как 21.399999618530273? - PullRequest
46 голосов
/ 07 октября 2008
double r = 11.631;
double theta = 21.4;

В отладчике они отображаются как 11.631000000000000 и 21.399999618530273.

Как мне этого избежать?

Ответы [ 14 ]

2 голосов
/ 07 октября 2008

Если вы используете Java и вам нужна точность, используйте класс BigDecimal для вычислений с плавающей запятой. Это медленнее, но безопаснее.

1 голос
/ 07 октября 2008

Если вас это беспокоит, вы можете настроить способ отображения некоторых значений во время отладки. Используйте это с осторожностью: -)

Улучшение отладки с помощью атрибутов отображения отладчика

0 голосов
/ 30 мая 2013

Согласно Javadoc

"Если хотя бы один из операндов числового оператора имеет тип double, то
операция выполняется с использованием 64-битной арифметики с плавающей точкой, и результат
числовой оператор является значением типа double. Если другой операнд не является двойным, это
сначала расширен (§5.1.5), чтобы набрать double с помощью числового продвижения (§5.6). "

Вот источник

0 голосов
/ 13 января 2009

См. Общая десятичная арифметика

Также обратите внимание при сравнении чисел, см. этот ответ для получения дополнительной информации.

...