在动作脚本中将大数字作为字符串转换为数字
Casting large numbers as string to number in actionscript
对于某些值,例如“10152116260776319”,使用 parseFloat 或 Number("***") 方法转换为数字会使原始值增加 1。
Number("10152116260776319") => 10152116260776320
Number("10202784509328139") => 10202784509328140
有什么办法可以解决这个问题吗?或者我是否需要将我的所有代码更新为字符串。
提前致谢。
问题不是 parseFloat
或 Number("***")
的问题,而是 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
对于某些值,例如“10152116260776319”,使用 parseFloat 或 Number("***") 方法转换为数字会使原始值增加 1。
Number("10152116260776319") => 10152116260776320
Number("10202784509328139") => 10202784509328140
有什么办法可以解决这个问题吗?或者我是否需要将我的所有代码更新为字符串。
提前致谢。
问题不是 parseFloat
或 Number("***")
的问题,而是 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