javascript Number 构造函数奇怪的行为

标签 javascript string numbers type-conversion

将字符串转换为数字会产生递增的值:

var n = '9999999999999999';
console.log(n); // -> 9999999999999999
var nn = Number(n)
console.log(nn); // -> 10000000000000000

如何避免这种情况?

最佳答案

9999999999999999 在 JavaScript 内部被视为 float 。 IEEE 754中无法准确表示 double ,因为它需要 54 位精度(位数为 log2(9999999999999999) = 53.150849512,并且由于小数位不存在,因此结果必须向上舍入),而 IEEE 754 仅提供 53 位位(1 个隐式位 + 52 个显式存储的尾数位)- 少一位。因此,数字只是四舍五入。

由于在这种情况下仅丢失一位,因此即使 54 位数字也可以精确表示,因为它们在该位中仍然包含 0,从而丢失了。考虑到 IEEE 754 的默认无偏舍入模式,奇数 54 位数字将四舍五入到最接近的值,该值恰好是双倍偶数 53 位数字。

[Source]

关于javascript Number 构造函数奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16482279/

相关文章:

java - 如果用户输入非数字字符,则进行代码重复循环?

javascript - typescript ,如何引用未导出的 OAuth2Client? google-api-nodejs-客户端

javascript - 我应该使用什么技术组合来制作具有新 HTML 5 中的自定义用户界面的视频播放器

javascript - 在 AngularJS 的自定义指令中包含第一个子 html

c - 如何在 C 中将 char 数据类型与 if 一起使用?

javascript - React.js 控制的文本光标焦点问题

Javascript 正则表达式没有返回正确的结果

java - Java 中的值传递

我可以将字符串传递给函数吗

math - 是否有可能设计一个接受无理数的自动机?