as3 - 用parseInt()检测超出范围的值

时间:2011-06-23 01:23:15

标签: actionscript-3 string integer range

如果我传递一个表示大于2 ^ 31的整数的字符串的parseInt(), 我怎么检测到它?

如果parseInt()返回NaN,它会膨胀, 但事实并非如此。

我可以测试parseInt对max int& min int。

什么更好?

TIA, 猎户

3 个答案:

答案 0 :(得分:1)

如果您假设返回值的最大值为 4,294,967,295 (uint的最大值),那么您就错了。

函数parseInt返回一个数字&不是。数字的最大值是 1.79e + 308 ,这是非常大的&如果您的数字高于该数字,则函数parseInt将返回NaN。

所以你可以简单地检查一下NaN&它应该工作。

答案 1 :(得分:0)

我最终测试了针对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)

答案 2 :(得分: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
}