2011-01-12 51 views
0

在Java中,我有float數組,其中有些是負數,比如:處理漂浮在Java

3.04, 9.02, -4.2, -3.21, 0.02, -0.34 

我只是想獲得高於2的浮點數,所以我用:

if(number > 2.0) print.. etc 

但我得到的不僅是數> 2,也是負數:

3.04, 9.02, -4.2, -3.21 

可能是什麼問題呢?

+3

你能發佈一個更完整的代碼片段來準確地展示你在做什麼嗎? – 2011-01-12 10:17:09

+0

你如何填充'數字'? – 2011-01-12 10:19:26

回答

0

,假設我們有一個與內容命名numbers.txt文件:

 
3.04 
9.02 
-4.2 
-3.21 
0.02 
-0.34 

這段代碼應該做的伎倆(我中省略異常處理可讀性):

float[] floats = new float[100]; // adjust as needed 

String fileName = "numbers.txt"; 
File f = new File(fileName); 
BufferedReader br = new BufferedReader(new FileReader(f)); 

String line = ""; 

int i = 0; 

while((line = br.readLine()) != null) { 

    if(line == null || line.isEmpty()) continue; // just in case there are empty lines in file 
    floats[i] = Float.parseFloat(line); 
    i++; 
} 

br.close(); 

for (float number : floats) { 
    if (number > 2.0) { 
     System.out.println(number); 
    } 
} 

輸出:

 
3.04 
9.02 
3

如果沒有看到代碼,很難分辨出問題所在。從你的描述寫明顯代碼,它工作正常:

public class Test { 
    public static void main(String[] args) { 
     float[] floats = { 3.04f, 9.02f, -4.2f, -3.21f, 0.02f, -0.34f }; 

     for (float number : floats) { 
      if (number > 2.0) { 
       System.out.println(number); 
      } 
     } 
    } 
} 

與我的比你的代碼 - 如果你仍然不能得到你的工作,請與您的代碼編輯你的問題。根據意見和問題

-1

這對評論太長,但應該指出如果你寫:

if (number > 2.0) 

那麼你可能不應該使用浮點數,因爲你不明白它們是如何工作的。

有上浮點數一個很好的維基百科頁面:

http://en.wikipedia.org/wiki/Floating_point

那麼我建議您閱讀80頁長「每個計算機科學家應該知道的浮點數什麼」。基本上:由於浮點數的精度有限,通常應該使用epsilon進行比較。

像這樣的事情:if(number> 2.0)是一個很大的禁忌。