舍入模式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)
BigDecimal five = new BigDecimal("5");
BigDecimal eleven = new BigDecimal("11");
BigDecimal x …Run Code Online (Sandbox Code Playgroud)