使用HALF_UP舍入到最接近的值

I. *_*rov 2 java rounding bigdecimal

我想将BigDecimal值舍入到最接近的整数.

我尝试使用Java BigDecimal这个问题的解决方案:舍入到最接近的整数值,但它对我不起作用.

BigDecimal scaled = value.setScale(0, RoundingMode.HALF_UP);
System.out.println(value + " -> " + scaled);
Run Code Online (Sandbox Code Playgroud)

它适用于以下情况:

100.12 -> 100.00
100.44 -> 100.00
100.50 -> 101.00
100.75 -> 101.00
Run Code Online (Sandbox Code Playgroud)

但它失败了

    100.47 -> 100 instead of 101.
Run Code Online (Sandbox Code Playgroud)

为什么这段代码不起作用?

use*_*900 5

您希望总是将数字四舍五入,在您的情况下使用RoundingMode .UP

HALF_UP只会.5向上舍入

舍入模式向"最近邻居"舍入,除非两个邻居等距,在这种情况下向上舍入.

表格显示了这些舍入操作的结果:

Input Number  UP  DOWN    CEILING FLOOR   HALF_UP HALF_DOWN   HALF_EVEN   UNNECESSARY
5.5           6     5      6       5       6          5         6   throw ArithmeticException
2.5           3     2      3       2       3          2         2   throw ArithmeticException
1.6           2     1      2       1       2          2         2   throw ArithmeticException
1.1           2     1      2       1       1          1         1   throw ArithmeticException
Run Code Online (Sandbox Code Playgroud)