从双精度创建 FastMoney/Money 有什么注意事项吗?

Are there any caveats of creating a FastMoney/Money from a double?

have seendouble 创建 BigDecimal 时出现问题。

尽管 FastMoney 不使用 BigDecimal(与 Money 相对),但我不确定当我从 double值。

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

double 尤其是 float 类型是危险的。这个数字是以 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 class 使用的不是 floating-point arithmetic but a fixed-point arithmetic