舍入在Java中有意想不到的结果

时间:2014-11-06 11:28:30

标签: java

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

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

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

4 个答案:

答案 0 :(得分:4)

这是因为你没有舍入,而是将一个浮点数转换为整数。转换只是删除小数部分。如果你想要圆,你必须使用

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

此外,如果您想使用明确的大写或小写舍入,则应使用Math.ceil(x)Math.floor(x)代替。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

使用(int)4.9f时,它只会截断小数值(不进行舍入!)。对于舍入,您需要使用Math.round()函数。

答案 3 :(得分:0)

你正在使用一个int和int不能保存十进制数,因为你将一个浮点数转换为int,所以它删除了十进制后的数字..

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

所以使用

double x = 4.9f