我想模拟在Java中的金额输入,即。说用户保持输入“1”,显示的金额应该是:Java BigDecimal /双精度错误
0.00
0.01
0.11
1.11
11.11
111.11
我都尝试双人床和BigDecimal的处理:
println(((new BigDecimal(current)).multiply(new BigDecimal(10)).add(new BigDecimal(0.01))).setScale(2, RoundingMode.HALF_UP).toString()))
println("" + Double.parseString(current) * 10 + 0.01)
但是双方似乎不是表明这样的:
0.00
0.01
0.11
1.11
11.1 <<< missing the 0.01 at the end
111.01
它们都是由于精确舍入错误(我认为BigDecimal没有这个问题)还是我做错了什么?
可能重复的[是浮点数学破?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –
恕我直言,你不应该使用BigDecimals或双倍货币。如果你想最精确的转换成便士。并直接与那些人合作。 –
你的代码看起来不错,但你的'println'行的操作顺序可能会让事情变得糟糕。如果将“+”“'移动到最后会发生什么? –