我正在使用实现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会扰乱任何涉及结果的数学运算。其次,我既没有预料到也找不到解决方法,无法避免使用科学计数法得出的结果(虽然我预计还有一种格式化方法我还没有发现)。
new BigDecimal("-232454.5324").round(new MathContext(2, RoundingMode.HALF_UP)).toString()
产生了一个结果-2.3E+5。这给我带来了两个问题。首先,我期望得到一个结果为-232454.5(-2.324545E+5),因此得到-230000会扰乱任何涉及结果的数学运算。其次,我既没有预料到也找不到解决方法,无法避免使用科学计数法得出的结果(虽然我预计还有一种格式化方法我还没有发现)。
由于项目的性质,我们对传递给round()方法的数字的大小/类型几乎没有任何期望值,因此任何解决方案都需要高度模块化。有人有什么建议吗?如果这里有用的话,这是该项目中此错误的Google代码问题报告链接。这是项目主页的链接。
非常感谢任何帮助。
new BigDecimal("23.2222").setScale(0, RoundingMode.HALF_EVEN).toPlainString()
当使用半偶舍入规则时,应该得到24(最接近的偶数整数),但实际上结果是23。我该如何将舍入规则应用于缩放操作? - JoeliusCaeser