gpt4 book ai didi

Java Math RoundingMode.HALF_EVEN 打印意外结果

转载 作者:行者123 更新时间:2023-11-30 02:38:06 28 4
gpt4 key购买 nike

我正在尝试调试 HALF_EVEN i java 的舍入问题,正如您在下面看到的,意外的结果是 377.35,我们本来可以预期它会打印 377.34 吗?

有人可以帮忙解释一下这种行为吗?

public static void main(String[] args) {


System.out.println((new BigDecimal(0.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
//prints 0.34

System.out.println((new BigDecimal(77.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
//prints 77.34

System.out.println((new BigDecimal(377.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
**//prints 377.35 ?????**

//anything larger than 256 is printing .35
System.out.println((new BigDecimal(255.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
//prints 255.34

System.out.println((new BigDecimal(256.3450)).setScale(2, RoundingMode.HALF_EVEN).toPlainString());
**//prints 256.35 ?????**


}

最佳答案

new BigDecimal(377.3450)

这一行单独失去了 BigDecimal 的所有优点,因为您首先传入了一个 double ,并且它完成了您不需要的所有舍入不想。

写,相反,

new BigDecimal("377.3450")

...并且通常在任何地方都使用 String 构造函数。在获得“正确”答案的情况下,浮点舍入很幸运,并且朝着正确的方向发展。

关于Java Math RoundingMode.HALF_EVEN 打印意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42570848/

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