JavaScript數字精度丟失問題總結
阿新 • • 發佈:2017-10-23
原因 tof str ref www double tin com 問題
本文分為三個部分:
1、JS 數字精度丟失的一些典型問題
2、JS 數字精度丟失的原因
3、解決方案(一個對象+一個函數)
一、JS數字精度丟失的一些典型問題
1. 兩個簡單的浮點數相加
0.1 + 0.2 != 0.3 // true
看看Java的運算結果
2. 大整數運算
9999999999999999 == 10000000000000001 // true
var x = 9007199254740992
x + 1 == x // true
16位和17位數竟然相等;加1竟然也相等。
3. toFixed 不會四舍五入(Chrome)
1.335.toFixed(2) // 1.33
線上曾經發生過 Chrome 中價格和其它瀏覽器不一致,正是因為 toFixed 兼容性問題導致。
二、JS 數字丟失精度的原因
計算機的二進制實現和位數限制有些數無法有限表示。就像一些無理數不能有限表示,如 圓周率 3.1415926...,1.3333... 等。JS 遵循 IEEE 754 規範,采用雙精度存儲(double precision),占用 64 bit。如圖
JavaScript數字精度丟失問題總結