2015-05-29 30 views
0

首先要做的事情是:我來自php,想用java擴大我的視野! 所以我看了一些書。我看到四捨五入的數字可能是Math.round()。爲什麼使用double而不是整數?

我的問題如下: 如果我想圓一個數目爲小數,我要使用此代碼:

double number; 
number = 1.111222; 
number = Math.round(number*100.0)/100.0; 

number = (digit) Math.round(number*100)/100;

爲什麼確實

number = Math.round(number*100)/100; 

不完全一樣的東西?

Thx提前,

馬克

+0

爲什麼會出現在數1,111222逗號? – jrahhali

+0

','不會編譯。我也不確定你真正的意思,因爲'number = Math.round(number * 100.0)/ 100.0'和'number = Math.round(number * 100)/ 100;'做同樣的事情。最後,「數字」是什麼? – CKing

+0

@ChetanKinger他們不這樣做,把我的'100'和'100.0'分開,並且會在一個情況下產生一個長,在另一個情況下產生一個長。 – chancea

回答

1

由於Math.round返回long。 所以四捨五入的結果(long)除以int。在劃分之前,JVM將兩者都轉換爲long。 請在這裏查看Java widening conversion rules

1

在javadoc中很清楚。

Returns the closest {@code int} to the argument, with ties rounding up. 

所以round(float)回報int,並round(double)回報long

0

當你調用Math.round()時,結果是一個整數值。當你劃分兩個整數時(例如/ 100),Java將執行整數除法,丟掉結果的小數部分。

當您用整數除以double(例如/ 100.0)時,Java將首先將整數轉換爲double值,然後執行浮點除法,保留小數部分。

+0

你是否嘗試從OP運行代碼? – CKing

+0

保持冷靜!我承認我錯誤地用點來表示逗號。我來自德國,這是我在java中的第一步。從昨天開始。好。這是錯誤的,但問題和答案是我一直在尋找的。所以謝謝艾倫! – maen

3

如果假設你的意思是把小數點爲逗號1.111222

的問題是,100將值轉換爲long100.0將其轉換爲doublelong的不能有小數,但double的可以。

看兩種情況:

案例1產生double

Math.round(1.111222*100.0) => Math.round(111.222) => 111 
111/100.0 => 1.11 

案例2產生 int long

(我orignally認爲int,但被證明是錯誤的輸出,原因是Math.round(double)返回一個long發現here

Math.round(1.111222*100) => Math.round(111) => 111 
111/100 => 1 //truncated due to being a long 

您可以通過運行該代碼看到這一點:

public static void main (String[] args) 
{ 
    double number = 1.111222; 

    System.out.println(Math.round(number*100.0)/100.0); 
    System.out.println(Math.round(number*100)/100); 

    Object a = Math.round(number*100.0)/100.0; 
    Object b = Math.round(number*100)/100; 

    System.out.println(a.getClass().getName()); 
    System.out.println(b.getClass().getName()); 

} 

它打印:

1.11 
1 
java.lang.Double 
java.lang.Long 
相關問題