从双重创建FastMoney / Money是否有任何警告?

时间:2018-12-19 23:21:59

标签: precision java-money jsr354

have seenBigDecimal创建double时出现问题。

尽管FastMoney不使用BigDecimal(与Money相对),但是我不确定当从double中创建它们时它们中的任何一个将如何表现值。

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

1 个答案:

答案 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