我正在与开源项目(axil)合作,该项目在java应用程序内部实现了脚本引擎,并且在尝试利用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() 方法的数字的大小/类型几乎没有期望,因此任何解决方案都需要高度模块化。有没有人有什么建议?如果有帮助的话,这里有一个指向项目中这个错误的谷歌代码问题报告的链接。 http://code.google.com/p/axil/issues/detail?id=58 这是项目主页的链接。 http://www.axil-lang.org/
很感谢任何形式的帮助。
不要使用 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 实例,它不会更改当前实例的比例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)