Java中使用BigDecimal的舍入模式

以下代码使用RoundingMode.HALF_EVEN

BigDecimal value1 = new BigDecimal("4.5");

value1=value1.setScale(0, RoundingMode.HALF_EVEN);

BigDecimal value2 = new BigDecimal("6.5");

value2=value2.setScale(0, RoundingMode.HALF_EVEN);

System.out.println(value1+"\n"+value2);

分别显示46。在我看来,它应该分别显示5和,7因为丢弃的小数部分左边的数字(在这种情况下为5)是

。在这种情况下,RoundingMode.HALF_UP

并且在的情况下RoundingMode.HALF_UPRoundingMode.UP当丢弃的小数部分> =

0.5时执行(这是正确的),否则RoundingMode.DOWN执行。

回答:

该行为在Javadoc中有很好的描述:

舍入模式向“最近的邻居”舍入, 。

因此,给定数字4.5,当您调用它时,它恰好位于4到5之间的数字范围的中间:

BigDecimal value1 = new BigDecimal("4.5").setScale(RoundingMode.ROUND_HALF_EVEN);

运行时也需要找出要舍入的邻居,也就是应该舍入到4或舍入到5?通常,它将基于哪个值4.5更接近,但在这种情况下,它接近

邻居。与其随意选择最终结果,不如选择偶数。这是的行为ROUND_HALF_EVEN。如果需要,您可以指定ROUND_HALF_UP最终结果为5,而不是4。此外,请记住,关于四舍五入的确定取决于最终结果(而不是整数的小数部分)大十进制数,就像您已经假设的那样)。

以上是 Java中使用BigDecimal的舍入模式 的全部内容, 来源链接: utcz.com/qa/399458.html

回到顶部