2011-05-22 105 views
0

我有這樣的程序片段:比較兩個數字

double stockWeight = 1; 
    if(data[0] > 9)   
     stockWeight = 1000*R(data[0]/10); 
    double compare = data[0]*100-stockWeight; 
    System.out.println(compare); 
    if(compare > 300.0 && compare <=600.0) 
     stockWeight += 300; 
    else if(compare > 600.0 && compare <= 900.0) 
     stockWeight += 600; 
    else if(compare > 900.0); 
     stockWeight += 900; 

     System.out.println(stockWeight); 

/////////////////////////////////// 
    private int R(double D){ 
     int howBIG = 1; 
     if (D >= 100){howBIG = 10;} 
     else if(D >= 1000){howBIG = 100;} 
     DecimalFormat F = new DecimalFormat("#"); 
     return Integer.valueOf(F.format(D/howBIG))*howBIG; 
    } 

輸出爲:

126.0 
1900.0 

這裏所有的數字都是雙類型。 data[0] = 11.26 爲什麼我的電腦認爲126.0大於900.0? R法基本上是10(100)格功能,如果大於100(1000),即送整數

+0

您的代碼片段包含一些獨立語句,然後是一個函數。這一切如何運行?而你的代碼只有一個'println()',但你的輸出似乎有兩條獨立的線...... – 2011-05-22 18:54:59

+0

爲什麼你使用***流派的DecimalFormat ***來四捨五入?我建議調查['java.lang.Math'](http://download.oracle.com/javase/6/docs/api/java/lang/Math.html)。 – 2011-05-22 19:08:14

+0

此代碼的縮進非常可怕。混淆和矛盾。附:如果(D> = 100){howBIG = 10;} else if(D> = 1000){howBIG = 100;},else子句將永遠不會被執行:) – 2011-05-22 19:20:40

回答

6

你很可能看到的,因爲在你的最後else語句雜散分號的混亂結果:

else if(compare > 900.0); 

所以這行不依賴於else條款,就一定會執行:

stockWeight += 900; 

從本質上講,你將永遠會在最後打印語句前加上900到stockWeight,不論是否compare > 900.0

+1

+1對於你敏銳的眼睛 – 2011-05-22 19:14:10

+0

!!!沒有看到分號......我想我太累了=],謝謝 – Medardas 2011-05-22 19:15:30