我正在尝试对这样的BigDecimals进行四舍五入:5.46597-> 5.46,我认为下面的代码对我有用,但事实并非如此。
我用BigDecimal.round和BigDecimal.setScale尝试过。
BigDecimal bD = new BigDecimal(5.46597); // whole number: 5.4659700000000004393996277940459549427032470703125
bD.setScale(2, RoundingMode.HALF_DOWN); // 5.47
bD.round(new MathContext(3, RoundingMode.HALF_DOWN)); // 5.47
这不是5.46,还是我误解了什么?
最佳答案
仅当实际值恰好位于两个可能的取整值之间的一半时,才将HALF_DOWN取整。即5.46500-> 5.46。另一方面是5.4650000001-> 5.47,因为它比5.46更接近5.47。
也许您正在寻找的是RoundingMode.DOWN
,它总是四舍五入。
关于java - 这是使用BigDecimals舍入的正确行为吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55851766/