如果我通過parseInt()表示大於2^31的整數的字符串, 我該如何檢測?as3 - 檢測超出範圍值w/parseInt()
它會膨脹,如果parseInt()返回NaN, 但它不會。
我可以測試parseInt返回的數字與最大int int & min int。
什麼更好?
TIA, 獵戶座
如果我通過parseInt()表示大於2^31的整數的字符串, 我該如何檢測?as3 - 檢測超出範圍值w/parseInt()
它會膨脹,如果parseInt()返回NaN, 但它不會。
我可以測試parseInt返回的數字與最大int int & min int。
什麼更好?
TIA, 獵戶座
你可以把它變成一個數第一,它可以是這樣的方式比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
}
如果我們假定你是返回值的最大值爲4,294,967,295(UINT爲最大值),那麼你就錯了。
函數parseInt返回一個數字&不是一個uint。一個數字的最大值是1.79e + 308這是相當大的&如果你的號碼高於那個,函數parseInt將返回NaN。
所以你可以簡單地檢查NaN &它應該工作。
我實際上轉換爲int,而不是uint。 parseInt()僅爲無效的數字字符串(如「hello」(基數10))返回NaN。對於表示值超出整數範圍的字符串,它只返回代表該值的數字。 ..然後當你把它投入int可能會產生非常糟糕的結果。 我結束了測試返回對NaN,並在範圍[int.MIN_VALUE,int.MAX_VALUE]。 –
那麼標題說「檢測超出範圍值的parseInt()」而不是「檢測超出整數範圍的值」或者說是一組自定義的字符串。無論如何,我猜你的問題解決了。 – loxxy
我結束了測試返回對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)
感謝Flassari。這就是我所做的。 parseInt()實際上返回一個數字,而不是一個int。 –