在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
可能是什麼問題呢?
在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
可能是什麼問題呢?
,假設我們有一個與內容命名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
如果沒有看到代碼,很難分辨出問題所在。從你的描述寫明顯代碼,它工作正常:
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);
}
}
}
}
與我的比你的代碼 - 如果你仍然不能得到你的工作,請與您的代碼編輯你的問題。根據意見和問題
這對評論太長,但應該指出如果你寫:
if (number > 2.0)
那麼你可能不應該使用浮點數,因爲你不明白它們是如何工作的。
有上浮點數一個很好的維基百科頁面:
http://en.wikipedia.org/wiki/Floating_point
那麼我建議您閱讀80頁長「每個計算機科學家應該知道的浮點數什麼」。基本上:由於浮點數的精度有限,通常應該使用epsilon進行比較。
像這樣的事情:if(number> 2.0)是一個很大的禁忌。
你能發佈一個更完整的代碼片段來準確地展示你在做什麼嗎? – 2011-01-12 10:17:09
你如何填充'數字'? – 2011-01-12 10:19:26