我对BigDecimal实例的划分结果有疑问 . 我的节目:
公共类DecimalPrecision
public static void main(String[] args) {
MathContext mathContext = new MathContext(25, RoundingMode.HALF_UP);
System.out.println(new BigDecimal("0.1111111111111111111111111").divide(new BigDecimal("3"), mathContext).toString());
}
结果如下:0.03703703703703703703703703但正确的结果是:0.03703703703703703703703704
基本上我的程序舍入最后一位数,即7到3,而不是4.为什么会这样?在mathContext中,我指定了舍入模式HALF_UP . 可能我在这个问题上有一个知识差距,但我确信HALF_UP会转向更大的 Value .
这个问题可以通过下一个方式解决:
value1 = value1.divide(value2, 10000, RoundingMode.HALF_UP);
return new BigDecimal(value1.toString()).round(mathContext);
但根据我的口味,将结果解析为String然后创建新的正确舍入的BigDecimal会出现问题 . 我在寻求你的帮助,如何在不诉诸任何字符串的情况下解决这个问题?提前致谢 .
1 回答
您从一个25位数字开始并执行精度为25位的操作,因此您可以预期最后一位数字可能是错误的 . 解决方案是使用比您需要的更多的数字并舍入结果 .
版画