最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript 浮點(diǎn)運(yùn)算精度問(wèn)題分析與解決

 更新時(shí)間:2014年03月26日 11:46:11   作者:  
浮點(diǎn)數(shù)的精度問(wèn)題不是JavaScript特有的,因?yàn)橛行┬?shù)以二進(jìn)制表示位數(shù)是無(wú)窮的

分析

JavaScript 只有一種數(shù)字類型 Number ,而且在Javascript中所有的數(shù)字都是以IEEE-754標(biāo)準(zhǔn)格式表示的。 浮點(diǎn)數(shù)的精度問(wèn)題不是JavaScript特有的,因?yàn)橛行┬?shù)以二進(jìn)制表示位數(shù)是無(wú)窮的:

十進(jìn)制           二進(jìn)制
0.1              0.0001 1001 1001 1001 ...
0.2              0.0011 0011 0011 0011 ...
0.3              0.0100 1100 1100 1100 ...
0.4              0.0110 0110 0110 0110 ...
0.5              0.1
0.6              0.1001 1001 1001 1001 ...

所以比如 1.1 ,其程序?qū)嶋H上無(wú)法真正的表示 ‘1.1',而只能做到一定程度上的準(zhǔn)確,這是無(wú)法避免的精度丟失:

1.09999999999999999

在JavaScript中問(wèn)題還要復(fù)雜些,這里只給一些在Chrome中測(cè)試數(shù)據(jù):

 輸入               輸出
1.0-0.9 == 0.1     False
1.0-0.8 == 0.2     False
1.0-0.7 == 0.3     False
1.0-0.6 == 0.4     True
1.0-0.5 == 0.5     True
1.0-0.4 == 0.6     True
1.0-0.3 == 0.7     True
1.0-0.2 == 0.8     True
1.0-0.1 == 0.9     True

解決

那如何來(lái)避免這類 1.0-0.9 != 0.1 的非bug型問(wèn)題發(fā)生呢?下面給出一種目前用的比較多的解決方案, 在判斷浮點(diǎn)運(yùn)算結(jié)果前對(duì)計(jì)算結(jié)果進(jìn)行精度縮小,因?yàn)樵诰瓤s小的過(guò)程總會(huì)自動(dòng)四舍五入:

復(fù)制代碼 代碼如下:

(1.0-0.9).toFixed(digits)                   // toFixed() 精度參數(shù)須在 0 與20 之間
parseFloat((1.0-0.9).toFixed(10)) === 0.1   // 結(jié)果為True
parseFloat((1.0-0.8).toFixed(10)) === 0.2   // 結(jié)果為True
parseFloat((1.0-0.7).toFixed(10)) === 0.3   // 結(jié)果為True
parseFloat((11.0-11.8).toFixed(10)) === -0.8   // 結(jié)果為True

方法提煉
復(fù)制代碼 代碼如下:

// 通過(guò)isEqual工具方法判斷數(shù)值是否相等
function isEqual(number1, number2, digits){
 digits = digits == undefined? 10: digits; // 默認(rèn)精度為10
 return number1.toFixed(digits) === number2.toFixed(digits);
}

isEqual(1.0-0.7, 0.3);  // return true

// 原生擴(kuò)展方式,更喜歡面向?qū)ο蟮娘L(fēng)格
Number.prototype.isEqual = function(number, digits){
 digits = digits == undefined? 10: digits; // 默認(rèn)精度為10
 return this.toFixed(digits) === number.toFixed(digits);
}

(1.0-0.7).isEqual(0.3); // return true

相關(guān)文章

  • 使用focus方法讓光標(biāo)默認(rèn)停留在INPUT框

    使用focus方法讓光標(biāo)默認(rèn)停留在INPUT框

    讓光標(biāo)默認(rèn)停留在INPUT框中,用focus方法可以實(shí)現(xiàn),下面有個(gè)示例代碼,需要的朋友可以參考下
    2014-07-07
  • 24個(gè)實(shí)用JavaScript?開(kāi)發(fā)技巧

    24個(gè)實(shí)用JavaScript?開(kāi)發(fā)技巧

    這篇文章主要給大家分享了24個(gè)實(shí)用JavaScript?的開(kāi)發(fā)技巧,文章圍繞JavaScript?的開(kāi)發(fā)技巧講解展開(kāi)全文,具有一定的參考價(jià)值,需要的朋友可以參考一下,希望對(duì)你有所幫助
    2021-12-12
  • JS兩種類型的表單提交方法實(shí)例分析

    JS兩種類型的表單提交方法實(shí)例分析

    這篇文章主要介紹了JS兩種類型的表單提交方法,結(jié)合實(shí)例形式分析了2種常用的表單提交驗(yàn)證的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • JS對(duì)HTML標(biāo)簽select的獲取、添加、刪除操作

    JS對(duì)HTML標(biāo)簽select的獲取、添加、刪除操作

    HTML標(biāo)簽中的select在使用過(guò)程中很頻繁,在本文將為大家介紹下使用js是如何操作的,下面有個(gè)不錯(cuò)的示例,感興趣的朋友不要錯(cuò)過(guò)
    2013-10-10
  • js實(shí)現(xiàn)表單校驗(yàn)功能

    js實(shí)現(xiàn)表單校驗(yàn)功能

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)表單校驗(yàn)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 圖片懶加載imgLazyLoading.js使用詳解

    圖片懶加載imgLazyLoading.js使用詳解

    這篇文章主要為大家詳細(xì)介紹了圖片懶加載imgLazyLoading.js的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • use jscript with List Proxy Server Information

    use jscript with List Proxy Server Information

    use jscript with List Proxy Server Information...
    2007-06-06
  • 原生JS實(shí)現(xiàn)文件上傳

    原生JS實(shí)現(xiàn)文件上傳

    這篇文章主要為大家詳細(xì)介紹了原生JS實(shí)現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • js實(shí)現(xiàn)簡(jiǎn)單放大鏡特效

    js實(shí)現(xiàn)簡(jiǎn)單放大鏡特效

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)簡(jiǎn)單放大鏡特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 詳解tween.js的使用教程

    詳解tween.js的使用教程

    本篇文章主要介紹了詳解tween.js的使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09

最新評(píng)論

保靖县| 开封县| 丰城市| 潢川县| 穆棱市| 襄垣县| 鄂尔多斯市| 汨罗市| 辽阳县| 威信县| 龙门县| 久治县| 江陵县| 寻甸| 涟水县| 会泽县| 杭州市| 栖霞市| 普兰店市| 东兰县| 新疆| 万盛区| 武宁县| 丽江市| 内乡县| 独山县| 聂拉木县| 将乐县| 昌黎县| 临西县| 宜州市| 米林县| 肥乡县| 贡嘎县| 灵丘县| 巢湖市| 宿州市| 化州市| 宁夏| 舟山市| 夏津县|