我have seen从BigDecimal
创建double
时出现问题。
尽管FastMoney
不使用BigDecimal
(与Money
相对),但是我不确定当从double
中创建它们时它们中的任何一个将如何表现值。
不建议从FastMoney
创建一个Money
/ double
实例吗?我是否应该总是尝试从String
创建它们?
答案 0 :(得分:1)
double
类型,尤其是float
类型是危险的。该数字是以2为底的数字系统,因此不可能直接表示0.24F
,因为如果没有重复的十进制句号,即1/3
或{{1 }}。
因此,将浮点数1/3=0.3333...
打印回十进制表示形式时,其显示为0.(3)
,但由于四舍五入而发生了变化:
0.24F
0.23
可以直接显示:
println(0.24F) => 0.23999999463558197021484375
所以回答您的问题:取决于情况。对于0.25、0.5、0.75,可以使用double。
但是FastMoney类不使用floating-point arithmetic,而是使用fixed-point arithmetic