2011-06-23 37 views
0

如果我通過parseInt()表示大於2^31的整數的字符串, 我該如何檢測?as3 - 檢測超出範圍值w/parseInt()

它會膨脹,如果parseInt()返回NaN, 但它不會。

我可以測試parseInt返回的數字與最大int int & min int。

什麼更好?

TIA, 獵戶座

回答

0

你可以把它變成一個數第一,它可以是這樣的方式比INT更大,檢查它,int.MAX_VALUE的和int.MIN_VALUE ,然後最終將其轉換爲int。

var myNumber:Number = Number(myStringOrSomething); 
var myInt:int; 
if (myNumber <= int.MAX_VALUE && myNumber >= int.MIN_VALUE) { 
    // Number is big (or small) enough, cast it as int 
    myInt = Math.round(myNumber) as int; 
} else { 
    // Failed at converting to int 
} 
+0

感謝Flassari。這就是我所做的。 parseInt()實際上返回一個數字,而不是一個int。 –

1

如果我們假定你是返回值的最大值爲4,294,967,295(UINT爲最大值),那麼你就錯了。

函數parseInt返回一個數字&不是一個uint。一個數字的最大值是1.79e + 308這是相當大的&如果你的號碼高於那個,函數parseInt將返回NaN。

所以你可以簡單地檢查NaN &它應該工作。

+0

我實際上轉換爲int,而不是uint。 parseInt()僅爲無效的數字字符串(如「hello」(基數10))返回NaN。對於表示值超出整數範圍的字符串,它只返回代表該值的數字。 ..然後當你把它投入int可能會產生非常糟糕的結果。 我結束了測試返回對NaN,並在範圍[int.MIN_VALUE,int.MAX_VALUE]。 –

+0

那麼標題說「檢測超出範圍值的parseInt()」而不是「檢測超出整數範圍的值」或者說是一組自定義的字符串。無論如何,我猜你的問題解決了。 – loxxy

0

我結束了測試返回對NaN,也是在範圍[int.MIN_VALUE,int.MAX_VALUE]。

這裏有一些例子和結果。 (假=不是一個有效的int,真正=是有效的int)

"abcde"  , false // 
"0XYZ"  , true // i wish this wasn't the case, but it is. 
" 123 "  , true // 
"NaN"  , false // 
"85899345912", false // 2^33 - 1 
"2147483647", true // 2^31 - 1 
"2147483648", false // 2^31 
"-2147483647", true // -(2^31 - 1) 
"-2147483648", true // -(2^31 
"-2147483649", false // -(2^31 + 1)