我有一个区域,我正在做以下事情:
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,
答案 0 :(得分:2)
我认为这实际上是使用2和RoundingMode HALF_UP的正确舍入。
BigDecimal的Javadocs定义ROUND_HALF_UP以执行以下操作:
舍入模式向"最近邻居"除非两个邻居都是等距的,在这种情况下会向上舍入。如果丢弃的分数≥0.5,则表现为ROUND_UP;否则,表现为ROUND_DOWN。请注意,这是我们大多数人在小学就读的四舍五入模式。
因此,这些测试用例看起来对于规范来说是正确的。
由于比例设置为2,您将得到十进制数的两位数,因此它将查看第三位数以确定要舍入的方式。希望这有帮助!