我将以下代码与带有 half_even 舍入模式的 java BigDecimal setScale 方法一起使用,并得到以下结果。
new BigDecimal(1.115).setScale(2, RoundingMode.HALF_EVEN).toPlainString()
Run Code Online (Sandbox Code Playgroud)
结果:1.11
预期:1.12
由于最接近 5 左边的偶数应该是 2,所以我期望的结果是 1.12。但结果是 1.11。然后再次,
new BigDecimal(1.145).setScale(2, RoundingMode.HALF_EVEN).toPlainString()
Run Code Online (Sandbox Code Playgroud)
结果:1.15
预期:1.14
因为 5 左边的偶数是 4,所以我希望结果是 1.14。对此有什么解释吗?
这是由浮点不精确(在您的double输入值中)引起的。
System.out.println(new BigDecimal(1.115));
1.1149999999999999911182158029987476766109466552734375
Run Code Online (Sandbox Code Playgroud)
请改用 String 构造函数。
BigDecimal.valueOf("1.115")
Run Code Online (Sandbox Code Playgroud)
一旦数字是 BigDecimal,就不会丢失精度并且四舍五入正常工作。但是您必须确保数字完整地进入 BigDecimal(并且在此之前还没有通过强制它通过浮点类型而失去精度)。
| 归档时间: |
|
| 查看次数: |
1635 次 |
| 最近记录: |