[英]Rounding with DecimalFormat in Java
让我们看看Java中的以下语句。
System.out.println(new DecimalFormat("0").format(2.4)); //returns 2
System.out.println(new DecimalFormat("0").format(2.5)); //returns 2 <---Concentrate here
System.out.println(Math.round(2.5)); //returns 3
System.out.println(new DecimalFormat("0").format(2.6)); //returns 3
System.out.println(new DecimalFormat("0").format(3.5)); //returns 4
在上述陈述中,除以下情况外,所有其他情况都很明显。
System.out.println(new DecimalFormat("0").format(2.5));
它应该返回3
但它返回2
。 怎么样?
DecimalFormat
的默认舍入模式是RoundingMode.HALF_EVEN
。 这意味着如果数字更接近下一个邻居,它会向上舍入或向下舍入。 当数字恰好在两个邻居之间时(在您的情况下为2和3),它会舍入到最接近的偶数(在您的情况下为2)。
正如您所看到的,当您使用3.5进行尝试时,它会四舍五入为4。
如果您想要更“直观”的行为,请调用setRoundingMode(RoundingMode.HALF_UP)
http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html#setRoundingMode setRoundingMode(RoundingMode.HALF_UP)
)
这与HALF_EVEN
相同,但如果数字恰好在两个邻居之间,则总是向上舍入。
这是故意的行为。 从文档 :
四舍五入
DecimalFormat使用半偶数舍入(请参阅ROUND_HALF_EVEN)进行格式设置。
关于ROUND_HALF_EVEN :
舍入模式向“最近邻居”舍入,除非两个邻居等距,在这种情况下,向着偶邻居舍入。 如果丢弃的分数左边的数字是奇数,则表现为ROUND_HALF_UP; 如果它是偶数,则表现为ROUND_HALF_DOWN。 请注意,这是在一系列计算中重复应用时最小化累积误差的舍入模式。
这也称为银行家的四舍五入。
另一方面, Math.Round
使用以下公式,即“正常”舍入:
(long)Math.floor(a + 0.5d)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.