Существуют ли какие-либо предостережения от создания FastMoney/Money из двойника?

Я видел, что есть проблемы при создании BigDecimal от double,

Хотя FastMoney не использует BigDecimal (в отличие от Money), Я не уверен, как будет вести себя любой из них, когда я double значение.

Создает FastMoney/Money экземпляр из double не рекомендуется? Должен ли я всегда пытаться создать их из String?

1 ответ

Решение

double и особенно float типы опасны. Эти числа представляют собой систему счисления base-2, поэтому невозможно представить 0.24F прямо как то же самое невозможно представить 1/3 в десятичной системе без повторяющегося десятичного периода, т.е. 1/3=0.3333... или же 0.(3),

Так что число с плавающей точкой 0.24F при печати обратно в десятичное представление отображается как 0.23 с изменением из-за округления:

println(0.24F) => 0.23999999463558197021484375

в то время как 0.25F может быть показан непосредственно:

println(0.25F) => 0.25

Итак, отвечая на ваш вопрос: это зависит. Для 0.25, 0.5, 0.75 нормально использовать double.

Но класс FastMoney использует не арифметику с плавающей точкой, а арифметику с фиксированной точкой

Другие вопросы по тегам