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

資訊專欄INFORMATION COLUMN

JavaScript四舍五入的那些坑

zollero / 3583人閱讀

摘要:進制之謎眾所周知,計算機在設計之初,出于各方面角度考慮,最終采用二進制的格式來存儲數據。同樣的情況,也會出現在十進制和二進制的轉換中。當我們在計算機中,聲明一個變量為,其實該數字作為二進制保存在計算機中,并不真的是。

前言

經常使用JavaScript用來處理數字的程序員都知道,JavaScript的Number.toFixed,這一函數,在格式化數字時,會自動進行四舍五入,例如:

10.125.toFixed(2) ---> "10.13"

但是在某些情況下,其四舍五入的結果,往往都不盡人意,例如:

10.145.toFixed(2) ---> "10.14"

那為何為出現上述這種情況,需要從進制談起。

進制之謎

眾所周知,計算機在設計之初,出于各方面角度考慮,最終采用二進制的格式來存儲數據。而我們平時對于數字所慣用的進制是十進制。用二進制的格式來存儲十進制的數據,必然會面臨進制的轉換,進制的轉換就會面臨精度的丟失。

例如,對于?,對于三進制的數來說是0.1,而對于十進制來說,是0.333(3循環)。那對于三個?相加,對于三進制來說,就是一(逢三進一),而對于十進制來說,就是0.999(9循環)。

同樣的情況,也會出現在十進制和二進制的轉換中。當我們在計算機中,聲明一個變量為10.145,其實該數字作為二進制保存在計算機中,并不真的是10.145。可以通過Number.prototype.toPrecision方法來一探究竟。

Number.prototype.toPrecision方法以指定的精度返回該數值對象的字符串表示。

10.145.toPrecision(21) --->?"10.1449999999999995737"

因此就可以解釋,為什么toFixed()方法返回的四舍五入的值,在某些情況不符合預料。

同樣,也告訴大家,浮點數的所有計算,加減乘除無一例外,在某些情況下,都會出現不符合預料的情況,最常見的如0.1+0.2,等等。

解決方案

針對上述情況,我寫了一個簡單的庫,可以滿足數字的四舍五入需求。round-js

探索浮點數標準

和大部分語言不同,JavaScript目前對于數字的表示,只有一種類型,即Number,采用64位雙精度浮點數來表示一個數,其標準與大多數語言一樣,采用IEEE-754標準。IEEE-754下64位雙精度浮點數的標準,可以用一張圖來表示,如下:

sign:代表符號,用1位來表示,即正數負數,1代表正數,0代表負數;

exponent:代表指數,底數為2,用11位來表述;

fraction:真正的有效數字,用52位來表示。

最終,任何一個數,對于該標準,都使用如下公式來表示得出:

其中:

V:結果

S:上面的sign

M:有效數字fraction

E:上面的exponent

可以看出,這個表示方法,類似十進制中的科學計數法。
對于這些概念,IEEE-754標準中還有許多規定,例如<1M<2,等等,更多細節就不展開了。

完。

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

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

相關文章

  • javascript高級程序設計》筆記:Number類型

    摘要:用表示法表示的數值等于前面的數值乘以的指數次冪。下面是一個使用表示法表示數值的例子等于注意浮點類型精度控制的兩個方法是原型上實現的一個方法,其作用是對一個浮點數進行四舍五入并保留固定小數位。 進制表示 談到Number類型,不得不提進制(此處不做過多介紹)八進制字面值的第一位必須是零(0),然后是八進制數字序列(0~7)十六進制字面值的前兩位必須是 0x,后跟任何十六進制數字(0~9 ...

    Tychio 評論0 收藏0
  • jQuery 3.0 beta 發布

    摘要:回調函數將固定為異步執行。這些將被移除這些應該會保留需要注意的是,那些繼續存在的回調函數不會有任何變化,只有的方法會受影響。 創作不夠,譯文來湊。 跟上篇一樣是編譯,不準備逐字翻。比如,我會把we譯成jQuery官方團隊,或者他們。 初譯版,待校正。這篇文章比較長,翻譯難度也不小,如果有問題,歡迎提出,我盡量修改。 正文開始。 歪果仁也要雙喜臨門,于是 jQuery 官方團隊選在 j...

    LeanCloud 評論0 收藏0
  • CSS外掛:Sass那些裝逼函數(function)

    摘要:,返回的最大值。非相同的單位,報錯編譯為,返回一個隨機數。函數函數稱為三元條件函數,主要因為他和中的三元判斷非常的相似。顏色函數暫時還沒用到過。函數,根據三個值創建一個顏色將一個顏色根據透明度轉換成顏色。 前戲:前幾篇文章其實都是些基礎必備的,什么變量、繼承、占位符、混合宏...這回來高級點的,玩玩Sass 自帶的一些函數...有字符串函數(String Functions)、數字函數...

    booster 評論0 收藏0
  • Javascript 簡介

    摘要:在中,標識符常用于定義變量名和函數名等。復雜的表達式由簡單表達式和運算符組成。布爾類型只有兩個值真和假。表示一個空的對象。操作符檢測會返回。是派生自的,因此規定對它們的相等性測試返回表示值相等。 Javascript 簡介 JavaScript是一種運行在瀏覽器中的解釋型的編程語言:將文本格式的字符代碼發送給瀏覽器由瀏覽器解釋運行。 JavaScript組成 核心(ECMAScrip...

    duan199226 評論0 收藏0

發表評論

0條評論

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