2

已经看到BigDecimal从创建时存在问题double

虽然FastMoney不使用BigDecimal(而不是Money),但我不确定当我从一个double值创建它们时它们中的任何一个会如何表现。

是否从不推荐创建FastMoney/Money实例?double我应该总是尝试从创建它们String吗?

4

1 回答 1

1

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。

但是 FastMoney 类使用的不是浮点运算,而是定点运算

于 2018-12-19T23:47:47.960 回答