如果我传递一个表示大于2 ^ 31的整数的字符串的parseInt(), 我怎么检测到它?
如果parseInt()返回NaN,它会膨胀, 但事实并非如此。
我可以测试parseInt对max int& min int。
什么更好?TIA, 猎户
答案 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
}