2015-05-26 30 views
0

當我把下面的代碼檢測到的值「NaN」識別爲雙解析的正確值時,我很驚訝:O並進入了if和nto else ...你知道爲什麼以及如何更好地保護我的代碼以避免這種情況。如果數字可以轉換爲雙倍,那麼值應該去。Double.TryParse - 無法正常工作

If Double.TryParse(array(3), NumberStyles.Float, CultureInfo.InvariantCulture, doubleitem) _ 
    AndAlso Not double.IsNaN(doubleitem) Then 
    ' ... ' 
Else 
    ' ... ' 
End If 

你必須使用:

If Double.TryParse(array(3), doubleitem) Then 

       array(3) = doubleitem 
      Else 
       array(3) = Nothing 
      End If 

enter image description here

+0

當陣列(3)的值是「NaN的」它來到行:陣列(3)= doubleitem – Arie

+0

我必須爲特定的原因,只有一個我不能弄清楚,Double.Try解析識別某些字符串作爲Parse的cooreect值。如何避免這種情況?我認爲Double.TryParse就夠了,但似乎不是。 – Arie

+0

在我的情況下它不會收到。數組是字符串類型 – Arie

回答

2

這不是Double.TryParse的錯誤行爲,而是你身邊的誤會。
Double結構實際上包含一個稱爲NaN的常量,它表示一個不是數字的值。 因此,當您對字符串"NaN"執行Double.TryParse時,您的結果是Double.NaN,這是double的有效值。

改變你的條件,這

If Double.TryParse(array(3), doubleitem) andalso not Double.IsNaN(doubleitem) Then 
    array(3) = doubleitem 
Else 
    array(3) = Nothing 
End If 

,一切都應該工作。

+0

此版本正在工作 – Arie

+0

是否還有其他可以添加的情況來避免類似的情況或其不足? – Arie

+0

@StackUser:首先使用正確的數據類型。你爲什麼在存儲數字的數組中存儲'NaN'? –

3

它使用InvariantCulture(自其他語言使用不同的名稱爲NaN),然後明確地檢查它是否是<>Double.NaN你可以試試,解析Double.IsNan來檢查一個數字是否是雙倍,you cannot compare it

+0

實際上,你不能使用'<> Double.NaN',因爲它總是返回true。 –

+0

這個版本不起作用,但是感謝支持Tim – Arie

+0

我自己注意到了,用'double.IsNaN(doubleitem)' –