Ste*_*ino 2 java rounding bigdecimal
我期待这段代码:
double valore = 20.775;
BigDecimal c = new BigDecimal(valore);
c = c.setScale(2, RoundingMode.HALF_UP);
System.out.println(c.doubleValue());
Run Code Online (Sandbox Code Playgroud)
返回20.78,但它返回20.77.
这是一个错误吗?或者我错过了什么?
一切都是正确的.
您可以在SO上的另一个答案中阅读一些高级详细信息,或者在BigDecimal的文档中阅读更多内容
使用BigDecimal带有doubleparam的构造函数并不常见,因为它将准确地表示内部的内容double.所以当你写作:结果new BigDecimal(20.775)你不一定有20.775(相反,你会有类似的东西20.77499999999999857891452847979962825775146484375)
为了测试:
1)测试BigDecimal表示
a)System.out.println(new BigDecimal(20.775));=> 20.77499999999999857891452847979962825775146484375
b)System.out.println(new BigDecimal("20.775"));=>20.775
2)用不同的BigDecimal构造函数进行测试舍入:
a)new BigDecimal(20.775)在四舍五入后,将显示20.77.
b)new BigDecimal("20.775")四舍五入后将显示20.78.
c)new BigDecimal(String.valueOf(20.775)四舍五入后将显示20.78.
所以作为结论:不要使用BigDecimal构造函数和doubleparam.而是使用BigDecimal带有Stringparam的构造函数.
希望能帮助到你
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |