Mrc*_*ief 16 javascript rounding
我偶然发现了这个问题,parseInt我不确定为什么会这样.
console.log(parseInt("16980884512690999")); // gives 16980884512691000
console.log(parseInt("169808845126909101"));? // gives 169808845126909100
Run Code Online (Sandbox Code Playgroud)
我明显没有达到JavaScript限制中的任何数量限制(Number.MAX_VALUE = 1.7976931348623157e+308)
如果重要的话,运行Win 7 64位.
我在俯瞰什么?
Jim*_*iTh 15
不要将Number.MAX_VALUE与最大准确值混淆.javascript中的所有数字都存储为64位浮点数,这意味着您可以获得高(和低)数字,但它们只能精确到某一点.
双浮点(即Javascript)具有53位有效位精度,这意味着javascript中最高/最低"肯定准确"的整数是+/- 9007199254740992(2 ^ 53).高于/低于这个数字可能会变得准确(最后只是添加0的数字,因为指数位可以用来表示).
或者,用ECMAScript的话来说:"注意,数量不大于2 ^ 53的所有正整数和负整数都可以在数字类型中表示(实际上,整数0有两个表示,+ 0和-0)."
更新
只是为现有问题添加一点,ECMAScript规范要求如果一个整数Number少于22位,.toString()将以标准十进制表示法输出(例如169808845126909100000在您的示例中).如果它有22位或更多位数,它将以标准化的科学记数法输出(例如1698088451269091000000- 输出另外的0 - 作为1.698088451269091e+21).