gpt4 book ai didi

java - 如何处理 Java 的 BigDecimal 中的舍入错误

转载 作者:行者123 更新时间:2023-12-04 21:29:27 24 4
gpt4 key购买 nike

我正在使用在 java 应用程序中实现脚本引擎的开源项目 (axil),并且在尝试利用 BigDecimal 的舍入时遇到了一个主要的绊脚石。似乎 BigDecimal 正在将我的输入转换为科学记数法,然后将我传递的精度应用于数字的 SN 表示的系数,而不是它的非 SN 表示。例如:
new BigDecimal("-232454.5324").round(new MathContext(2, RoundingMode.HALF_UP)).toString()
产生 -2.3E+5 的结果.这给我带来了两个问题。首先,我期待 -232454.5 的结果( -2.324545E+5 ),所以得到 -230000抛出任何涉及结果的数学。其次,我不期望,也找不到解决方法,在 SN 中获得结果(尽管我希望有一种我还没有偶然发现的格式化方法)。

现在由于项目的性质,我们可以对传入 round() 方法的数字的大小/类型做出很少的期望,因此任何解决方案都需要高度模块化。有没有人有什么建议? If it would be helpful here's a link to the google code issue report for this bug in the project. And here is a link to the project homepage.

很感谢任何形式的帮助。

最佳答案

不要使用 round 方法,而是使用 setScale ,其中参数是小数位数:

BigDecimal bd = new BigDecimal("-232454.5324").setScale(1,
RoundingMode.HALF_UP);
String string = bd.toPlainString();
System.out.println(string); // prints -232454.5

另请注意, setScale 返回一个新的 BigDecimal 实例,它不会更改当前实例的比例。

关于java - 如何处理 Java 的 BigDecimal 中的舍入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10883308/

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