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);
分别显示4
和6
。在我看来,它应该分别显示5
和,7
因为丢弃的小数部分左边的数字(在这种情况下为5)是
。在这种情况下,RoundingMode.HALF_UP
并且在的情况下RoundingMode.HALF_UP
, RoundingMode.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