成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

為什么JS中0.1+0.2!=0.3?

   JS中數(shù)字運(yùn)算時(shí),有一個(gè)叫做 數(shù)字運(yùn)算中的精度缺失的問題,這篇文章,就帶著大家了解下JS運(yùn)算中精度的缺失問題。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了開平免費(fèi)建站歡迎大家使用!

  首先我們先來看一個(gè)例子:

為什么JS中0.1+0.2 != 0.3?

  這里0.1 + 0.2 != 0.3 這個(gè)就是我們要解決的問題了。

  要弄清這個(gè)問題的原因,首先我們需要了解下在計(jì)算機(jī)中數(shù)字是如何存儲(chǔ)和運(yùn)算的。在計(jì)算機(jī)中,數(shù)字無論是定點(diǎn)數(shù)還是浮點(diǎn)數(shù)都是以多位二進(jìn)制的方式進(jìn)行存儲(chǔ)的。

  在JS中數(shù)字采用的IEEE 754的雙精度標(biāo)準(zhǔn)進(jìn)行存儲(chǔ),我們可以無需知道他的存儲(chǔ)形式,只需要簡單的理解成就是存儲(chǔ)一個(gè)數(shù)值所使用的二進(jìn)制位數(shù)比較多而已,這樣得到的數(shù)會(huì)更加精確。

  這里為了簡單直觀,我們使用定點(diǎn)數(shù)來說明問題。在定點(diǎn)數(shù)中,如果我們以8位二進(jìn)制來存儲(chǔ)數(shù)字。

  對于整數(shù)來說,十進(jìn)制的35會(huì)被存儲(chǔ)為: 00100011 其代表 2^5 + 2^1 + 2^0。

  對于純小數(shù)來說,十進(jìn)制的0.375會(huì)被存儲(chǔ)為: 0.011 其代表 1/2^2 + 1/2^3 = 1/4 + 1/8 = 0.375

  而對于像0.1這樣的數(shù)值用二進(jìn)制表示你就會(huì)發(fā)現(xiàn)無法整除,最后算下來會(huì)是 0.000110011....由于存儲(chǔ)空間有限,最后計(jì)算機(jī)會(huì)舍棄后面的數(shù)值,所以我們最后就只能得到一個(gè)近似值。

  在JS中采用的IEEE 754的雙精度標(biāo)準(zhǔn)也是一樣的道理,我們且不管這個(gè)標(biāo)準(zhǔn)下的存儲(chǔ)方式跟定點(diǎn)數(shù)存儲(chǔ)有何不同,單單在這一點(diǎn)上他們都是相同的,也就是存儲(chǔ)空間有限,當(dāng)出現(xiàn)這種無法整除的小數(shù)的時(shí)候就會(huì)取一個(gè)近似值,在js中如果這個(gè)近似值足夠近似,那么js就會(huì)認(rèn)為他就是那個(gè)值。

  比較拗口,舉個(gè)例子:

為什么JS中0.1+0.2 != 0.3?

  所以我們現(xiàn)在應(yīng)該可以理解,就是說由于0.1轉(zhuǎn)換成二進(jìn)制時(shí)是無限循環(huán)的,所以在計(jì)算機(jī)中0.1只能存儲(chǔ)成一個(gè)近似值。另外說一句,除了那些能表示成 x/2^n 的數(shù)可以被精確表示以外,其余小數(shù)都是以近似值得方式存在的。

  在0.1 + 0.2這個(gè)式子中,0.1和0.2都是近似表示的,在他們相加的時(shí)候,兩個(gè)近似值進(jìn)行了計(jì)算,導(dǎo)致最后得到的值是0.30000000000000004,此時(shí)對于JS來說,其不夠近似于0.3,于是就出現(xiàn)了0.1 + 0.2 != 0.3 這個(gè)現(xiàn)象。 當(dāng)然,也并非所有的近似值相加都得不到正確的結(jié)果。

  有時(shí)兩個(gè)近似值進(jìn)行計(jì)算的時(shí)候,得到的值是在JS的近似范圍內(nèi)的,于是就可以得到正確答案。至于哪些值計(jì)算后能得到正確結(jié)果,哪些不能,我們也不需要去記。

  最好的方法就是我們想辦法規(guī)避掉這類小數(shù)計(jì)算時(shí)的精度問題就好了,那么最常用的方法就是將浮點(diǎn)數(shù)轉(zhuǎn)化成整數(shù)計(jì)算。因?yàn)檎麛?shù)都是可以精確表示的。

  方法也很簡單,舉個(gè)例子:

為什么JS中0.1+0.2 != 0.3?

  按照這個(gè)思路,寫個(gè)簡單的方法就好了。

http://shenzhen.offcn.com/

分享名稱:為什么JS中0.1+0.2!=0.3?
標(biāo)題鏈接:http://jinyejixie.com/article40/pgeseo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、動(dòng)態(tài)網(wǎng)站、關(guān)鍵詞優(yōu)化微信公眾號、標(biāo)簽優(yōu)化網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
土默特右旗| 公主岭市| 金平| 都安| 临汾市| 上杭县| 台山市| 剑河县| 巨鹿县| 巴彦淖尔市| 高台县| 徐水县| 八宿县| 浦北县| 富裕县| 延安市| 绥阳县| 宜黄县| 阿城市| 霍林郭勒市| 崇礼县| 富宁县| 阿尔山市| 麟游县| 临颍县| 沽源县| 砚山县| 古交市| 昆山市| 临高县| 贵南县| 苏州市| 潞城市| 宜都市| 乃东县| 宣威市| 两当县| 柯坪县| 姚安县| 深圳市| 项城市|