如果我向parseInt()传递一个表示大于2^31的整数的字符串,如何检测?
如果parseInt()返回NaN,那就太棒了,但它没有。
我可以测试parseInt返回的数字和max int & min int的值。
还有更好的吗?
tia,猎户座
发布于 2011-06-24 06:18:10
你可以先把它转换成一个数字,这个数字可以比整数大得多,然后对照int.MAX_VALUE和int.MIN_VALUE对它进行检查,最后将它转换为整数。
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
}发布于 2011-06-23 11:25:04
如果你假设返回值的最大值是4,294,967,295 (uint的最大值),那么你就错了。
函数parseInt返回一个数字&而不是uint。一个数字的最大值是1.79e+308,这个值非常大&但是,如果您的数字大于这个值,函数parseInt将返回NaN。
因此,您可以简单地检查NaN &它应该可以工作。
发布于 2011-06-24 01:34:21
我最终测试了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)https://stackoverflow.com/questions/6448363
复制相似问题