对于某些值,例如“10152116260776319”,使用parseFloat或Number(“***”)方法转换为数字会将原始值增加1.
Number("10152116260776319") => 10152116260776320
Number("10202784509328139") => 10202784509328140
有什么方法可以解决这个问题吗?或者我是否需要将所有代码更新为字符串。
提前致谢。
答案 0 :(得分:0)
问题不在于parseFloat
或Number("***")
的问题,而在于Number
类型的限制。基本上,Number
类型只有在低于2 53 (9,007,199,254,740,992)时才能正确保持整数,因为它们是双精度浮点数(有关详细信息,请查看此维基百科页面) :http://en.wikipedia.org/wiki/Double-precision_floating-point_format)
即使没有强制转换也会出现问题,例如
var val1:Number = 9007199254740990;
var val2:Number = 9007199254740991;
var val3:Number = 9007199254740992;
var val4:Number = 9007199254740993;
var val5:Number = 9007199254740994;
var val6:Number = 10152116260776319;
trace(val1); // 9007199254740990
trace(val2); // 9007199254740991
trace(val3); // 9007199254740992
trace(val4); // 9007199254740992
trace(val5); // 9007199254740994
trace(val6); // 10152116260776320
如果你真的需要存储大的整数,那么有人可以使用BigInt
类http://as3asclublib.googlecode.com/svn-history/r29/trunk/data/BigInt.as