2014-11-06 66 views
0

我很惊讶,当我运行此代码:四舍五入有意想不到的效果在Java中

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

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

+3

因为它不四舍五入。 – immibis 2014-11-06 11:29:46

+0

舍弃4.9中的小数部分。你会得到什么? – 2014-11-06 11:32:27

+0

@immibis嗯,它实际上是四舍五入的。这不仅仅是人们习惯的四舍五入方式(将距离零点四舍五入)。 – 2014-11-06 11:46:56

回答

3

使用一个强制转换简单地截断值而不是执行适当的舍入。您可以使用Math.round来获得正确的舍入值,或使用BigDecimal来选择8种不同的舍入模式。

4

这是因为你没有四舍五入,而是将float作为整数。铸造只是删除小数部分。如果你想圆,你必须使用

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

另外,如果你想用明确的上限或下限取整,你应该使用Math.ceil(x)Math.floor(x)代替。

0

当使用(int)4.9f时,它将简单地截断小数值(不舍入!)。为了四舍五入,您需要使用Math.round()函数。

0

您使用的是int和诠释着持有小数,你是铸造出浮上来诠释,因此消除了小数点后的位数..

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

所以使用

double x = 4.9f