我正在使用在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()方法,因此任何解决方案都需要高度模块化.有没有人有什么建议?如果它有用,这里是项目中此错误的谷歌代码问题报告的链接. 这是项目主页的链接.
很感谢任何形式的帮助.
不要使用round方法,而是使用setScale,其中argument是小数位数:
BigDecimal bd = new BigDecimal("-232454.5324").setScale(1,
RoundingMode.HALF_UP);
String string = bd.toPlainString();
System.out.println(string); // prints -232454.5
Run Code Online (Sandbox Code Playgroud)
另请注意,setScale返回一个新的BigDecimal实例,它不会更改当前实例的比例.
| 归档时间: |
|
| 查看次数: |
3775 次 |
| 最近记录: |