Страницы

Поиск по вопросам

пятница, 5 октября 2018 г.

Потеря точности Bigdecimal

Создается переменная BigDecimal bet = new BigDecimal(0.00000010) и передается на сервер и он возвращает значение отличное от ожидаемого. Не понятно почему так.


Ответ

При использовании конструктора, принимающего на вход double, возникает неприятная особенность, отмеченная в документации.
Поскольку вещественное число при переводе в двоичную форму представляется, как правило, бесконечной двоичной дробью, то при создании объекта, например, BigDecimal(0.1), мантисса, хранящаяся в объекте, окажется очень большой. (ссылка на статью)
Поэтому число будет сохранено неточно. В связи с этим лучше используйте конструктор, принимающий на вход строку:
Bigdecimal bet = new Bigdecimal("0.00000010");

Комментариев нет:

Отправить комментарий