Страницы

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

суббота, 30 ноября 2019 г.

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

#java #swing #bigdecimal


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


Ответы

Ответ 1



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

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

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