Js 数据精度之 521.3*100
目录
原罪
|
|
用你的浏览器来执行上面的计算,你应该能得到这个神奇的结果(52129.99999999999)。 Why?
JS 数字丢失精度的原因
|
|
1 位用来表示符号位 11 位用来表示指数 52 位表示位数
Example
|
|
为什么会是这样?
首先,十进制的 0.1 和 0.2 都会被转换成二进制,但由于浮点数用二进制表达时是无穷的
|
|
IEEE 754 标准的 64 位双精度浮点数的小数部分最多支持 53 位二进制位,所以两者相加之后得到二进制为:
|
|
因浮点数小数位的限制而截断的二进制数字,再转换为十进制,就成了 0.30000000000000004。所以在进行算术计算时会产生误差
如何解决
toFix
|
|
Math.round
|
|
倍数
|
|
Refs
Disclaimer
本文仅代表个人观点,与 Thoughtworks 公司无任何关系。
SHA256 checksum: f2fe1394e4ab9297ed69ff73ac32e9ac1375f01c2102183b509bf9379a5995d6
赞助
SHA256 checksum: 964978ecd2059064abe542e51dc02e204d3ee2e6c320ca68e2b1399ce0c6953c
使用此 文件 进行校验:
gpg --verify PayForGuzhongren.svg.sig