[英]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.