我已经看到BigDecimal
从创建时存在问题double
。
虽然FastMoney
不使用BigDecimal
(而不是Money
),但我不确定当我从一个double
值创建它们时它们中的任何一个会如何表现。
是否从不推荐创建FastMoney
/Money
实例?double
我应该总是尝试从创建它们String
吗?
我已经看到BigDecimal
从创建时存在问题double
。
虽然FastMoney
不使用BigDecimal
(而不是Money
),但我不确定当我从一个double
值创建它们时它们中的任何一个会如何表现。
是否从不推荐创建FastMoney
/Money
实例?double
我应该总是尝试从创建它们String
吗?
double
尤其是float
类型是危险的。这个数字是 base-2 数字系统,那么不可能0.24F
直接表示为相同的,1/3
如果没有重复的十进制句点,就不可能在十进制系统中表示,即1/3=0.3333...
或0.(3)
。
0.24F
因此,当打印回十进制表示时,浮点数显示为0.23
由于四舍五入而发生的变化:
println(0.24F) => 0.23999999463558197021484375
while0.25F
可以直接显示:
println(0.25F) => 0.25
所以回答你的问题:这取决于。对于 0.25、0.5、0.75,可以使用 double。