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

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

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

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

1 Ответ

0 голосов
/ 20 декабря 2018

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

* 1008.* Таким образом, число с плавающей запятой 0.24F при печати в десятичном представлении отображается как 0.23 с изменением из-за округления:
println(0.24F) => 0.23999999463558197021484375

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

println(0.25F) => 0.25

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

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

...