根据标准, 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
5726718050568503296 / 0b10011110111100101100011101110011011110011110100
正好等于65536
,也就是说2**16
。这个字符串表示方法有误吗?我的意思是,浮点数是正确的,但十进制字符串不正确。 - ASDFGertetoString
方法会产生错误的十进制数。 - ASDFGerte