摘要:進制之謎眾所周知,計算機在設(shè)計之初,出于各方面角度考慮,最終采用二進制的格式來存儲數(shù)據(jù)。同樣的情況,也會出現(xiàn)在十進制和二進制的轉(zhuǎn)換中。當我們在計算機中,聲明一個變量為,其實該數(shù)字作為二進制保存在計算機中,并不真的是。
前言
經(jīng)常使用JavaScript用來處理數(shù)字的程序員都知道,JavaScript的Number.toFixed,這一函數(shù),在格式化數(shù)字時,會自動進行四舍五入,例如:
10.125.toFixed(2) ---> "10.13"
但是在某些情況下,其四舍五入的結(jié)果,往往都不盡人意,例如:
10.145.toFixed(2) ---> "10.14"
那為何為出現(xiàn)上述這種情況,需要從進制談起。
進制之謎眾所周知,計算機在設(shè)計之初,出于各方面角度考慮,最終采用二進制的格式來存儲數(shù)據(jù)。而我們平時對于數(shù)字所慣用的進制是十進制。用二進制的格式來存儲十進制的數(shù)據(jù),必然會面臨進制的轉(zhuǎn)換,進制的轉(zhuǎn)換就會面臨精度的丟失。
例如,對于?,對于三進制的數(shù)來說是0.1,而對于十進制來說,是0.333(3循環(huán))。那對于三個?相加,對于三進制來說,就是一(逢三進一),而對于十進制來說,就是0.999(9循環(huán))。
同樣的情況,也會出現(xiàn)在十進制和二進制的轉(zhuǎn)換中。當我們在計算機中,聲明一個變量為10.145,其實該數(shù)字作為二進制保存在計算機中,并不真的是10.145??梢酝ㄟ^Number.prototype.toPrecision方法來一探究竟。
Number.prototype.toPrecision方法以指定的精度返回該數(shù)值對象的字符串表示。
10.145.toPrecision(21) --->?"10.1449999999999995737"
因此就可以解釋,為什么toFixed()方法返回的四舍五入的值,在某些情況不符合預料。
同樣,也告訴大家,浮點數(shù)的所有計算,加減乘除無一例外,在某些情況下,都會出現(xiàn)不符合預料的情況,最常見的如0.1+0.2,等等。
解決方案針對上述情況,我寫了一個簡單的庫,可以滿足數(shù)字的四舍五入需求。round-js
探索浮點數(shù)標準和大部分語言不同,JavaScript目前對于數(shù)字的表示,只有一種類型,即Number,采用64位雙精度浮點數(shù)來表示一個數(shù),其標準與大多數(shù)語言一樣,采用IEEE-754標準。IEEE-754下64位雙精度浮點數(shù)的標準,可以用一張圖來表示,如下:
sign:代表符號,用1位來表示,即正數(shù)負數(shù),1代表正數(shù),0代表負數(shù);
exponent:代表指數(shù),底數(shù)為2,用11位來表述;
fraction:真正的有效數(shù)字,用52位來表示。
最終,任何一個數(shù),對于該標準,都使用如下公式來表示得出:
其中:
V:結(jié)果
S:上面的sign
M:有效數(shù)字fraction
E:上面的exponent
可以看出,這個表示方法,類似十進制中的科學計數(shù)法。
對于這些概念,IEEE-754標準中還有許多規(guī)定,例如<1M<2,等等,更多細節(jié)就不展開了。
完。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/89620.html
摘要:用表示法表示的數(shù)值等于前面的數(shù)值乘以的指數(shù)次冪。下面是一個使用表示法表示數(shù)值的例子等于注意浮點類型精度控制的兩個方法是原型上實現(xiàn)的一個方法,其作用是對一個浮點數(shù)進行四舍五入并保留固定小數(shù)位。 進制表示 談到Number類型,不得不提進制(此處不做過多介紹)八進制字面值的第一位必須是零(0),然后是八進制數(shù)字序列(0~7)十六進制字面值的前兩位必須是 0x,后跟任何十六進制數(shù)字(0~9 ...
摘要:回調(diào)函數(shù)將固定為異步執(zhí)行。這些將被移除這些應(yīng)該會保留需要注意的是,那些繼續(xù)存在的回調(diào)函數(shù)不會有任何變化,只有的方法會受影響。 創(chuàng)作不夠,譯文來湊。 跟上篇一樣是編譯,不準備逐字翻。比如,我會把we譯成jQuery官方團隊,或者他們。 初譯版,待校正。這篇文章比較長,翻譯難度也不小,如果有問題,歡迎提出,我盡量修改。 正文開始。 歪果仁也要雙喜臨門,于是 jQuery 官方團隊選在 j...
摘要:,返回的最大值。非相同的單位,報錯編譯為,返回一個隨機數(shù)。函數(shù)函數(shù)稱為三元條件函數(shù),主要因為他和中的三元判斷非常的相似。顏色函數(shù)暫時還沒用到過。函數(shù),根據(jù)三個值創(chuàng)建一個顏色將一個顏色根據(jù)透明度轉(zhuǎn)換成顏色。 前戲:前幾篇文章其實都是些基礎(chǔ)必備的,什么變量、繼承、占位符、混合宏...這回來高級點的,玩玩Sass 自帶的一些函數(shù)...有字符串函數(shù)(String Functions)、數(shù)字函數(shù)...
摘要:在中,標識符常用于定義變量名和函數(shù)名等。復雜的表達式由簡單表達式和運算符組成。布爾類型只有兩個值真和假。表示一個空的對象。操作符檢測會返回。是派生自的,因此規(guī)定對它們的相等性測試返回表示值相等。 Javascript 簡介 JavaScript是一種運行在瀏覽器中的解釋型的編程語言:將文本格式的字符代碼發(fā)送給瀏覽器由瀏覽器解釋運行。 JavaScript組成 核心(ECMAScrip...
閱讀 1543·2023-04-26 00:08
閱讀 964·2021-11-23 18:51
閱讀 1783·2021-11-12 10:34
閱讀 1075·2021-10-14 09:43
閱讀 564·2021-08-18 10:23
閱讀 2668·2019-08-30 15:55
閱讀 3459·2019-08-30 11:05
閱讀 2863·2019-08-29 12:50