一切福田,不離方寸,從心而覓,感無不通。

JavaScript数字精度丢失问题总结

本文分为三个部分 JS 数字精度丢失的一些典型问题 JS 数字精度丢失的原因 解决方案(一个对象+一个函数)   一、JS数字精度丢失的一些典型问题   1. 两个简单的浮点数相加 1 0.1 + 0.2 != 0.3 // true   Firebug 这真不是 Firebug 的问题,可以用alert试试 (哈哈开玩笑)。   看看Java的运算结果   再看看Python   2. 大整数运算 1 9999999999999999 == 10000000000000001 // ? Firebug 16位和17位数竟然相等,没天理啊。   又如 1 2 var x = 9007199254740992 x + 1 == x // ? 看结果 三观又被颠覆了。   3. toFixed 不会四舍五入(Chrome) 1 1.335.toFixed(2) // 1.33 Firebug   线上曾经发生过 Chrome 中价格和其它浏览器不一致,正是因为 toFixed 兼容性问题导致   二、JS 数字丢失精度的原因 计算机的二进制实现和位数限制有些数无法有限表示。就像一些无理数不能有限表示,如 圆周率 3.1415926…,1.3333… 等。JS 遵循 IEEE 754 规范,采用双精度存储(double precision),占用 64 bit。如图   意义 1位用来表示符号位 11位用来表示指数 52位表示尾数   浮点数,比如 1 2 0.1 […]

龙生   08 Jan 2019
View Details