以下内容的输出:
let x = 10**23;
console.log(x.toString(16))
出来152d02c7e14af6000000
实际上是计算99999999999999991611392
而不是10**23
.有趣的是,以下内容无法计算false
:
let x = 10**23;
console.log(x==parseInt(x.toString(16),16))
我在这里弄错了什么吗?
JavaScript 数字是浮点数,它们越大越失去精度。当您超过Number.MAX_SAFE_INTEGER
(即 253– 1)时,精度变为>1。
这也意味着像10**23 === (1**23 - 123)
这样的东西评估为true
.