国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

為什么JavaScript里面0.1+0.2 === 0.3是false

nicercode / 3455人閱讀

摘要:返回是,這是為什么呢我們知道浮點數(shù)計算是不精確的,上面的返回式實際上是這樣的在的新規(guī)范加入了一個新的東西是在對象上面,新增一個極小的常量。根據(jù)規(guī)格,它表示與大于的最小浮點數(shù)之間的差。上面的代碼為浮點數(shù)運算,部署了一個誤差檢查函數(shù)。

0.1+0.2 === 0.3 //返回是false, 這是為什么呢??

我們知道浮點數(shù)計算是不精確的,上面的返回式實際上是這樣的:
0.1 + 0.2 = 0.30000000000000004

0.1 + 0.2 - 0.3 = 5.551115123125783e-17

5.551115123125783e-17.toFixed(20) = "0.00000000000000005551"

在JavaScript的新規(guī)范ES6加入了一個新的東西-->Number.EPSILON

Number.EPSILON是在Number對象上面,新增一個極小的常量。根據(jù)規(guī)格,它表示 1 與大于 1 的最小浮點數(shù)之間的差。

對于 64 位浮點數(shù)(double)來說,大于 1 的最小浮點數(shù)相當于二進制的 1.00..001 ,小數(shù)點后面有連續(xù) 51 個零。這個值減去 1 之后,就等于 2 的-52 次方。
Number.EPSILON 實際上是 JavaScript 能夠表示的最小精度。誤差如果小于這個值,就可以認為已經沒有意義了,即不存在誤差了。

引入一個這么小的量的目的,在于為浮點數(shù)計算,設置一個誤差范圍。

好了,我們來解決上面的浮點數(shù)計算的問題:

Number.EPSILON 可以用來設置“能夠接受的誤差范圍”。比如,誤差范圍設為 2 的-50 次方(即 Number.EPSILON * Math.pow(2, 2) ),即如果兩個浮點數(shù)的差小于這個值,我們就認為這兩個浮點數(shù)相等。

5.551115123125783e-17 < Number.EPSILON * Math.pow(2, 2) // true

因此, Number.EPSILON 的實質是一個可以接受的最小誤差范圍。

function withinErrorMargin (left, right) {
    return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
}

0.1 + 0.2 === 0.3 // false
withinErrorMargin(0.1 + 0.2, 0.3) // true

1.1 + 1.3 === 2.4 // false
withinErrorMargin(1.1 + 1.3, 2.4) // true

上面的代碼為浮點數(shù)運算,部署了一個誤差檢查函數(shù)。

文章引用自ES6標準。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/98934.html

相關文章

  • javascript0.1 + 0.2 != 0.3?

    摘要:按照的數(shù)字格式,整數(shù)有的范圍是,而且只能表示有限個浮點數(shù),能表示的個數(shù)為個。 0.1+0.2 等于0.3嗎?相信拿著這條題目隨便問一個高年級的小學生,他們都會毫不猶豫都回答:相等。是的,相等是正常的,這是常識。但是都說實踐是檢驗真理的唯一標準,拿這道簡單的算術題用javascript在chrome控制臺試驗一下: 結果令人大跌眼鏡,在控制臺輸入0.1+0.2 == 0.3返回的結果竟然...

    ivydom 評論0 收藏0
  • 利用babel(AST)優(yōu)雅地解決0.1+0.2!=0.3的問題

    摘要:因此利用以及語法樹在代碼構建過程中重寫等符號,開發(fā)時直接以這樣的形式編寫代碼,在構建過程中編譯成,從而在開發(fā)人員無感知的情況下解決計算失精的問題,提升代碼的可讀性。 前言 你了解過0.1+0.2到底等于多少嗎?那0.1+0.7,0.8-0.2呢? 類似于這種問題現(xiàn)在已經有了很多的解決方案,無論引入外部庫或者是自己定義計算函數(shù)最終的目的都是利用函數(shù)去代替計算。例如一個漲跌幅百分比的一個...

    張巨偉 評論0 收藏0
  • JS數(shù)值

    摘要:由于浮點數(shù)不是精確的值,所以涉及小數(shù)的比較和運算要特別小心。根據(jù)標準,位浮點數(shù)的指數(shù)部分的長度是個二進制位,意味著指數(shù)部分的最大值是的次方減。也就是說,位浮點數(shù)的指數(shù)部分的值最大為。 一 前言 這篇文章主要解決以下三個問題: 問題1:浮點數(shù)計算精確度的問題 0.1 + 0.2; //0.30000000000000004 0.1 + 0.2 === 0.3; // ...

    williamwen1986 評論0 收藏0
  • JS中如何理解浮點數(shù)?

    摘要:本文通過介紹的二進制存儲標準來理解浮點數(shù)運算精度問題,和理解對象的等屬性值是如何取值的,最后介紹了一些常用的浮點數(shù)精度運算解決方案。浮點數(shù)精度運算解決方案關于浮點數(shù)運算精度丟失的問題,不同場景可以有不同的解決方案。 本文由云+社區(qū)發(fā)表 相信大家在平常的 JavaScript 開發(fā)中,都有遇到過浮點數(shù)運算精度誤差的問題,比如 console.log(0.1+0.2===0.3)// fa...

    bang590 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<