zer*_*kms 9 javascript floating-point ieee-754
根据标准ES 将数字实现为 IEEE754 双倍。
每https://www.binaryconvert.com/result_double.html?decimal=053055050054055049056048053048053054056053048051050057054和其他编程语言https://play.golang.org/p/5QyT7iPHNim它看起来像5726718050568503296
值可以精确表示不失精度。
为什么它在 JS 中丢失了 3 个有效数字(在最新的稳定版 google chrome 和 firefox 中转载)
这个问题最初是从golang 中的复制 javascript 不安全数字触发的
该值在双 IEEE754 中绝对可以表示,请参阅 Go 中如何将裸位转换为 float64:https : //play.golang.org/p/zMspidoIh2w
Eri*_*hil 13
将值转换为Number
十进制数字时,JavaScript的默认规则是使用足够的数字来区Number
分值。具体来说,根据链接的答案,这源于 ECMAScript 2017 语言规范第 7.1.12.1 条中的第 5 步。(在 2020 版本中为 6.1.6.1.20。)
因此,虽然 5,726,718,050,568,503,296 是可表示的,但打印它会产生“5726718050568503000”,因为这足以将其与相邻的可表示值 5,726,718,050,568,502,502,502,502,502,82,502,52,502,802,526
您可以使用 请求更精确的字符串转换.toPrecision
,如x.toPrecision(21)
。