gpt4 book ai didi

Java BigDecimal setScale 和 half_even 四舍五入

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:11:41 27 4
gpt4 key购买 nike

我将以下代码与 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(并且在此之前没有通过强制它通过浮点类型而失去精度)。

关于Java BigDecimal setScale 和 half_even 四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27141899/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com