【发布时间】:2018-10-25 08:02:54
【问题描述】:
我在尝试将数字中的小数位四舍五入到最接近的百位数时遇到问题。
例子:
BigDecimal num1 = BigDecimal.valueOf(0.38871551);
MathContext mc = new MathContext(5);
System.out.println(num1.round(mc));
输出是0.38872,这是预期的。到目前为止一切都很好。再举一个例子:
BigDecimal num1 = BigDecimal.valueOf(1.1680418);
MathContext mc = new MathContext(5);
System.out.println(num1.round(mc));
输出为1.1680。这就是问题出现的地方。我想要的是输出为1.16804,但四舍五入似乎吞噬了4,而不是保持原样。
我尝试了不同的舍入模式,但这是我得到的:
-
RoundMode.UP给1.1681 -
RoundingMode.HALF_UP或RoundingMode.HALF_DOWN给1.1680等等..
如何获得所需的输出:
-
0.38871551应该四舍五入到0.38872 -
1.1680418应该四舍五入到1.16804 -
0.55052984应该四舍五入到0.55053
我什至尝试舍入到小数点后第 6 位而不是第 5 位,但我无法找到正确的组合来提供我想要的输出,如上所示。
【问题讨论】:
-
见this问题。
标签: java rounding bigdecimal