繁体   English   中英

四舍五入在Java中产生意外结果

[英]Rounding has unexpected results in Java

当我运行以下代码时,我感到很惊讶:

int  x = (int)4.9f;
System.out.println(x);

为什么结果是4,而不是5?

这是因为您不是四舍五入,而是将浮点数转换为整数。 强制转换只是删除小数部分。 如果要四舍五入,则必须使用

double x = 4.9f;
System.out.println(Math.round(x));

另外,如果要使用显式的上舍入或下舍入,则应改用Math.ceil(x)Math.floor(x)

使用强制转换只会截断值,而不执行适当的舍入。 您可以使用Math.round来获取正确的舍入值,或者使用BigDecimal来选择8种不同的舍入模式。

使用(int)4.9f ,它将仅截断十进制值( (int)4.9f入!)。 对于四舍五入,您需要使用Math.round()函数。

您正在使用int,并且int不能保留小数,因为您正在将浮点数转换为int,因此它会删除小数点后的数字。

int  x = (int)4.9f;
System.out.println(x);

所以用

double x = 4.9f 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM