Сравнение двойного значения с двойной константой - PullRequest
0 голосов
/ 04 ноября 2019

Я знаю, что были некоторые темы о двойном сравнении с дельтой, который является правильным способом сравнения двойных значений.

Однако мой вопрос касается сравнения двойного значения с константой. Есть ли вероятность, что значение 0 (например, прочитанное из xml) будет сохранено JVM с неверной точностью? Есть ли вероятность, что:

double constant = 0.0;
double reference = readValueFromDocument();//which is 0

boolean result = constant == reference;

result не всегда будет true?

В более общем смысле вопрос должен звучать так: JVM хранит двойные константы с неправильнойТочность при назначении или она действительна только для расчетов?

1 Ответ

1 голос
/ 04 ноября 2019

0.0, 0.00 или 0 могут быть представлены в точности как 8-байтовые двойные. 0,2 нет. Ваш случай будет всегда правдой. Только если переменная рассчитывается как 0,1-0,2 + 0,1, вы можете ожидать небольших отклонений. Это действительно для всех компьютерных языков с плавающей запятой. Также double не имеет точности.

Для финансового программного обеспечения BigDecimal фиксированная точка с точностью, шкала часто является лучшим выбором. new BigDecimal("12.00") дает точность 2 десятичных знака после десятичной точки.

...