小编Seb*_*ian的帖子

为什么 BigDecimal 除法中的 RoundingMode.HALF_EVEN 将 0.45 舍入到 0.5?

舍入模式HALF_EVEN应该将以 5 结尾的(十进制)数字舍入为最接近的甚至不太精确的数字(例如,4.5 舍入为 4,而 5.5 舍入为 6)。

现在看来Java的划分BigDecimal并不遵守这个规则;以下代码将其四舍五入为 0.45 至 0.5:

import java.math.*;

class Round {
    public static void main(String[] args) {
        BigDecimal five = BigDecimal.valueOf(5);
        BigDecimal eleven = BigDecimal.valueOf(11);
        BigDecimal x = five.divide(eleven, 1, RoundingMode.HALF_EVEN);
        System.out.println(x);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出0.5 请注意,5/11 = 0.4545454545...因此,当查看小数点后的前两位数字 0.45 时,我们显然希望看到四舍五入到最接近的偶数邻居,即 0.40,而不是 0.50。

谁能解释一下吗?

(如果重要的话,我正在运行java -version= openjdk版本“11.0.15”2022-04-19)

笔记:

  1. 这不是在将值放入 BigDecimal之前进行舍入;而是将值放入 BigDecimal 中。事实上,使用字符串构造函数时结果没有改变
     BigDecimal five = new BigDecimal("5");
     BigDecimal eleven = new BigDecimal("11");
     BigDecimal x …
Run Code Online (Sandbox Code Playgroud)

java numeric rounding bigdecimal

1
推荐指数
1
解决办法
736
查看次数

标签 统计

bigdecimal ×1

java ×1

numeric ×1

rounding ×1