我正在使用在 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/