Precision 创建快速货币/双人货币是否有任何注意事项?

Precision 创建快速货币/双人货币是否有任何注意事项?,precision,java-money,jsr354,Precision,Java Money,Jsr354,I从double创建BigDecimal时出现问题 虽然FastMoney不使用BigDecimal(与Money相反),但我不确定当我将它们从双倍值装箱时,它们中的任何一个都会有什么表现 不建议从double创建FastMoney/Money实例吗?我是否应该总是尝试从字符串创建它们?double,尤其是float类型是危险的。这些数字是以2为基数的数字系统,因此不可能直接表示0.24F,因为在没有重复小数周期的十进制系统中不可能表示1/3,即1/3=0.3333…或0.(3) 因此,当打印回

I从
double
创建
BigDecimal
时出现问题

虽然
FastMoney
不使用
BigDecimal
(与
Money
相反),但我不确定当我将它们从
双倍
值装箱时,它们中的任何一个都会有什么表现


不建议从
double
创建
FastMoney
/
Money
实例吗?我是否应该总是尝试从
字符串创建它们?

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,可以使用双精度


但是FastMoney类使用的不是a而是a

是的,它使用定点算法。。。但是有一个来自
double
的构造函数,所以我不确定如果我用
FastMoney.of(doubleCalculationResult,currency)
double
构造它会有什么表现,因为我记得它会自动装箱到double,然后将其转换为一个数字,有什么副作用吗?或者建议?没有任何副作用,因为Double已经实现了这个数字。唯一的问题是浮点中的double的值。请注意范围,尤其是FastMoney和roundings