gpt4 book ai didi

java - BigDecimal.Divide 给出不正确的结果

转载 作者:行者123 更新时间:2023-12-01 07:21:33 26 4
gpt4 key购买 nike

我在使用 BigDecimal 执行除法时得到不正确的结果。数字1 = 221500.0数字2 = 12.0这是我的代码片段:

BigDecimal d1 = new BigDecimal(String.valueOf(number1)).setScale(13, 4);
BigDecimal d2 = new BigDecimal(String.valueOf(number2)).setScale(13, 4);
return (d1.divide(d2, 13, 4 )).doubleValue();

18458.333333333332

如果我使用计算器执行相同的计算,它会给出18458.333333333333333333333333333

如果在处理 BigDecimal 中的比例时遇到任何问题,请告诉我。如果有人让我知道如何使用计算器得出相同的结果,将会很有帮助。

最佳答案

您要求 divide() 调用获得 13 位精度,这就是它给您的结果。

然后将其转换为 double 并注意到 double 无法处理该精度。

BigDecimal d1 = new BigDecimal(String.valueOf(221500.0)).setScale(13, BigDecimal.ROUND_HALF_UP);
BigDecimal d2 = new BigDecimal(String.valueOf(12.0)).setScale(13, BigDecimal.ROUND_HALF_UP);
BigDecimal d3 = d1.divide(d2, 13, BigDecimal.ROUND_HALF_UP);
System.out.println("BigDecimal: " + d3);
System.out.println("as double : " + d3.doubleValue());

输出

BigDecimal: 18458.3333333333333
as double : 18458.333333333332

如果您打算放弃使用 BigDecimal 获得的额外精度,为什么不直接使用 double 进行数学计算呢?

<小时/>

换个说法:
不要执行 new BigDecimal(String.valueOf(doubleValue))
使用 BigDecimal.valueOf(doubleValue)。

设置d1d2的比例似乎毫无意义。
除非明确需要,否则尽可能晚地舍入(如果有的话)。

关于java - BigDecimal.Divide 给出不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35590577/

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