BigDecimal setScale方法返回奇怪的结果

时间:2015-06-21 17:33:20

标签: java rounding bigdecimal

我有一个区域,我正在做以下事情:

BigDecimal number = new BigDecimal(String.valueOf("81.4125"));

以上是BigDecimal,其比例设置为4;

但如果我这样做:

BigDecimal roundedNumber = number.setScale(2, RoundingMode.HALF_UP);

它返回81.41,这显然是不正确的。如果我使用404.1675运行相同的实验,它将返回404.17 !!这是预期的还是BigDecimal类记录的特定行为?

KR,

1 个答案:

答案 0 :(得分:2)

我认为这实际上是使用2和RoundingMode HALF_UP的正确舍入。

BigDecimal的Javadocs定义ROUND_HALF_UP以执行以下操作:

  

舍入模式向"最近邻居"除非两个邻居都是等距的,在这种情况下会向上舍入。如果丢弃的分数≥0.5,则表现为ROUND_UP;否则,表现为ROUND_DOWN。请注意,这是我们大多数人在小学就读的四舍五入模式。

因此,这些测试用例看起来对于规范来说是正确的。

由于比例设置为2,您将得到十进制数的两位数,因此它将查看第三位数以确定要舍入的方式。希望这有帮助!