as3 - обнаружение значения вне диапазона w / parseInt () - PullRequest
0 голосов
/ 23 июня 2011

если я передам parseInt () строку, представляющую целое число больше 2 ^ 31, как мне это обнаружить?

было бы здорово, если parseInt () вернул NaN, но это не так.

я мог бы проверить число, которое parseInt возвращает против max int & min int.

что-нибудь лучше?

tia, orion

Ответы [ 3 ]

1 голос
/ 23 июня 2011

Если вы предполагаете, что максимальное возвращаемое значение равно 4 294 967 295 (максимальное значение для uint), то вы ошибаетесь.

Функция parseInt возвращает Number, а не uint. Максимальное значение для числа равно 1,79e + 308 , что достаточно велико, и если ваше число превышает это значение, функция parseInt вернет NaN.

Так что вы можете просто проверить NaN, и он должен работать.

0 голосов
/ 24 июня 2011

Вы можете сначала превратить его в Число, которое может быть намного больше, чем 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 голосов
/ 23 июня 2011

я закончил тестирование возврата по NaN, а также за то, что он находился в диапазоне [int.MIN_VALUE, int.MAX_VALUE].

вот несколько примеров и результатов. (false = недопустимый int, true = действительный 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)
...