1. 程式人生 > >JavaScript數字精度丟失問題總結

JavaScript數字精度丟失問題總結

原因 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數字精度丟失問題總結