2014-11-06 54 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