在动作脚本中将大数字作为字符串转换为数字

Casting large numbers as string to number in actionscript

对于某些值,例如“10152116260776319”,使用 parseFloat 或 Number("***") 方法转换为数字会使原始值增加 1。

Number("10152116260776319") => 10152116260776320
Number("10202784509328139") => 10202784509328140    

有什么办法可以解决这个问题吗?或者我是否需要将我的所有代码更新为字符串。

提前致谢。

问题不是 parseFloatNumber("***") 的问题,而是 Number 类型的限制。基本上,如果整数低于 253 (9,007,199,254,740,992),Number 类型只能正确保存整数,因为它们是双精度浮点数(查看此维基百科页面更多详情: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 class 你可以使用:http://as3asclublib.googlecode.com/svn-history/r29/trunk/data/BigInt.as