Java BigDecimal setScale和舍入为half_even

我使用带有half_even舍入模式的java BigDecimal setScale方法的以下代码,并得到以下结果。

new BigDecimal(1.115).setScale(2, RoundingMode.HALF_EVEN).toPlainString() 

结果:1.11

预计:1.12

由于从左到5的最接近的偶数应该是2,我预期的结果是1.12。 但结果是1.11。 然后再次,

 new BigDecimal(1.145).setScale(2, RoundingMode.HALF_EVEN).toPlainString() 

结果:1.15

预计:1.14

因为5左边的偶数是4,我希望结果是1.14。 对此有何解释?

这是由浮点不精确引起的(在double输入值中)。

 System.out.println(new BigDecimal(1.115)); 1.1149999999999999911182158029987476766109466552734375 

请改用String构造函数。

 BigDecimal.valueOf("1.115") 

一旦数字是BigDecimal,就不会丢失精度并且舍入正常。 但是你必须确保数字完整地进入BigDecimal(并且在此之前还没有通过强制它通过浮点类型而丢失精度)。