Страницы

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

Показаны сообщения с ярлыком bigdecimal. Показать все сообщения
Показаны сообщения с ярлыком bigdecimal. Показать все сообщения

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

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

#java #swing #bigdecimal


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


Ответы

Ответ 1



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

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

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

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


Ответ

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