2011-02-07 75 views
4

這個問題說明了一切。我有一些雙打,我正在做一些事情。如何用數組數組表示NaN?

double expectedOutput[] = { 6.38792, 12.91079, 14.33333, 13.44517, 
       12.34539, 12.05397, 8.34061, 2.07900, -2.01999, -5.47802, 
       -8.21610, -9.26719, -11.02378 }; 

理想情況下,我將測試以查看是否

6.38792 == 6.38792,並用 '及格'

在一定條件下結束,我最終像

6.38792 != NaN 

情況知道這有時是一個有效的案例,我如何在代碼中表示NaN?

我要麼需要包括NaNs到我的預期元素的數組或以某種方式弄清楚,結果不是數字

我使用的Java

+0

用什麼語言?!格兒。 – Olhovsky 2011-02-07 01:22:33

+0

Java。我會更新問題 – JAM 2011-02-07 01:23:13

+0

Double.NaN?測試NaN x == x(確保它不是NaN),Double.isNaN()等 – bestsss 2011-02-07 01:28:36

回答

5

在Java中,您可以通過使用

Double.NaN 

所以你可以把這個到您的陣列得到NaN的。

如果你的問題是,如何檢查,如果事情是NaN,你可以叫

Double.isNan(/* ... value ... */); 
1
double d = 0.0/0.0; 
if(Double.isNan(d)){ 
    // Double d is not a number. 
} 

或者:

double d = Double.Nan; 
if(Double.isNan(d)){ 
    // Double d is not a number. 
} 
4

您必須明確地進行測試,因爲NaN != NaN,您不能將它包含在您的數組中。你必須使用Double.isNaN(x)

0

由於在許多語言的NaN不等於本身(在Java中也有),你應該把它處理特定案件。使用Float.NaN或Double.NaN來引用NaN。使用Float.isNaN或Double.isNaN來檢查特定值是否爲NaN。

0

這是Double對象實際上比原始對象double s更有用的情況。

// auto-boxes them all to Double objects 
Collection<Double> expectedOutput = 
    Arrays.asList(6.38792, 12.91079, 14.33333, 13.44517, 12.34539, 
        12.05397, 8.34061, 2.07900, -2.01999, -5.47802, 
        -8.21610, -9.26719, -11.02378, Double.NaN); 
// maybe fill into HashSet for more efficient lookup? 

// later: 
double d = Double.NaN; 
if(expectedOutput.contains(d)) { 
    System.out.println("found"); 
} 

的原因是,Double.equals實際上實現了平等合同的自反性條件,這意味着Double.valueOf(Double.NaN).equals(Double.valueOf(Double.NaN))true,違背Double.NaN != Double.NaN