gpt4 book ai didi

带有 String 构造函数的 Java BigDecimal 错误与 ROUND_HALF_UP 舍入

转载 作者:搜寻专家 更新时间:2023-11-01 01:13:50 27 4
gpt4 key购买 nike

我正在尝试对 BigDecimal 类实现新的成绩舍入,但我遇到了一个可能的错误,可能是我做错了什么。下面的代码暴露了我的问题:

public static void main(String[] args) throws IOException {
BigDecimal valDouble = new BigDecimal(0.35);
valDouble = valDouble.setScale(1, BigDecimal.ROUND_HALF_UP);
System.out.println(valDouble.doubleValue()); // prints 0.3

BigDecimal valString = new BigDecimal(new String("0.35"));
valString = valString.setScale(1, BigDecimal.ROUND_HALF_UP);
System.out.println(valString.doubleValue()); // prints 0.4
}

我的疑问是,对于 double 和 String 构造函数,BigDecimal 是否不同?

我无法理解这个“错误”,至少,我只是使用一个简单的字符串连接来“解决”它,如下所示:

BigDecimal valDouble = new BigDecimal("" + 0.35);

知道是什么导致了这种奇怪的行为吗?

最佳答案

这不是错误。 0.35 作为双字面量表示不完全等于 0.35 的值;可能是 0.349999995 之类的东西。所以它向下舍入。

String 构造函数允许您使用“0.35”精确指定 0.35,然后四舍五入。

不要在这里使用double构造函数;当需要使用 BigDecimal 时,您需要远离浮点领域。

关于带有 String 构造函数的 Java BigDecimal 错误与 ROUND_HALF_UP 舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11368496/

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