一文教會(huì)你解決js數(shù)字精度丟失問(wèn)題
一、關(guān)于為什么要解決精度丟失
可以看下例子,因?yàn)閖s失去精度問(wèn)題也是常見(jiàn)的問(wèn)題,正常我們可以四舍五入或者 toFixed保留小數(shù)這種去解決
現(xiàn)在遇到問(wèn)題是我們明知道計(jì)算結(jié)果是等于0.01的但是最后的結(jié)果確實(shí)true,如果我們遇到運(yùn)算問(wèn)題,小數(shù)數(shù)值比對(duì)問(wèn)題,那么我們就必須要去解決他,否則也就會(huì)出現(xiàn)上者情況,出現(xiàn)邏輯判斷出錯(cuò)問(wèn)題
二、怎么解決js的計(jì)算精度丟失問(wèn)題?
正常來(lái)說(shuō)如果是 小數(shù)點(diǎn)保留后2位、3位等等,我們可以使用常見(jiàn)的 * 百位數(shù)、千位數(shù) 實(shí)現(xiàn)整位結(jié)果后 將結(jié)果在除以對(duì)應(yīng)的數(shù)位實(shí)現(xiàn)結(jié)果,如下
console.log(5.22 - 5.21);
console.log((5.22 * 100 - 5.21 * 100) / 100);
根據(jù)上方的描述我們?cè)偃ブ劭次覀冏铋_(kāi)始的例子
結(jié)果也就成了我們想要的結(jié)果
三、toPrecision 特定方法返回四舍五入長(zhǎng)度字符串
當(dāng)然toFixed也是可以實(shí)現(xiàn)對(duì)應(yīng)的長(zhǎng)度取舍效果的,因?yàn)楦鞔鬄g覽器針對(duì)toFixed的各類(lèi)結(jié)果都是不同的有興趣的同學(xué)可以參考下下面這篇文章
在這里我們只介紹 toPrecision 參照方法詳解
那么我們也就知道了此方法是用來(lái)干什么的
當(dāng)然再有一點(diǎn)也就是從左到右 不為0的位置開(kāi)始計(jì)算
上方舉例 我們的結(jié)果是0.01
如果我們?nèi)ナ褂胻oPrecision的話,那么要填寫(xiě)的參數(shù)則為1
返還的結(jié)果也就是我們想要的 0.01
然后我們搭配 parseFloat 對(duì)字符串進(jìn)行一個(gè)浮點(diǎn)數(shù)值轉(zhuǎn)換后,然后對(duì)比得出最后結(jié)果
console.log(5.22 - 5.21 < 0.01); console.log((5.22 * 100 - 5.21 * 100) / 100 < 0.01); var num = 5.22 - 5.21; console.log(parseFloat(num.toPrecision(1)) < 0.01);
結(jié)語(yǔ)
到此這篇關(guān)于解決js數(shù)字精度丟失問(wèn)題的文章就介紹到這了,更多相關(guān)js數(shù)字精度丟失內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用ajaxfileupload插件實(shí)現(xiàn)文件上傳無(wú)刷新的具體方法
利用ajaxfileupload插件實(shí)現(xiàn)文件上傳無(wú)刷新的具體方法,需要的朋友可以參考一下2013-06-06js通過(guò)更改按鈕的顯示樣式實(shí)現(xiàn)按鈕的滑動(dòng)效果
使用js實(shí)現(xiàn)按鈕的滑動(dòng)效果,通過(guò)更改按鈕的顯示樣式,來(lái)實(shí)現(xiàn)按鈕動(dòng)態(tài)滑動(dòng),需要的朋友可以參考下2014-04-04JS實(shí)現(xiàn)鼠標(biāo)滑過(guò)折疊與展開(kāi)菜單效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)鼠標(biāo)滑過(guò)折疊與展開(kāi)菜單效果代碼,涉及JavaScript基于鼠標(biāo)事件動(dòng)態(tài)改變頁(yè)面元素樣式的相關(guān)實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-09-09JavaScript實(shí)現(xiàn)指定數(shù)量的并發(fā)限制的示例代碼
這篇文章主要介紹了JavaScript實(shí)現(xiàn)指定數(shù)量的并發(fā)限制的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03javascript中parentNode,childNodes,children的應(yīng)用詳解
本篇文章是對(duì)javascript中parentNode,childNodes,children的應(yīng)用進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12基于JavaScript的數(shù)據(jù)結(jié)構(gòu)隊(duì)列動(dòng)畫(huà)實(shí)現(xiàn)示例解析
這篇文章主要介紹了基于JavaScript的數(shù)據(jù)結(jié)構(gòu)隊(duì)列動(dòng)畫(huà)實(shí)現(xiàn)示例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08JS數(shù)組扁平化的方法合集(遞歸,while循環(huán),flat)
數(shù)組扁平化也是面試常考題之一,今天就和大家簡(jiǎn)單分享一下常見(jiàn)的數(shù)組扁平方法,這題其實(shí)主要考察的是遞歸思想,因?yàn)楫?dāng)數(shù)組里面嵌套非常多層數(shù)組的時(shí)候只能通過(guò)循環(huán)遞歸來(lái)進(jìn)行扁平,本次分享主要也是分享本題的遞歸思想,需要的朋友可以參考下2024-06-06JavaScript事件監(jiān)聽(tīng)之鍵盤(pán)事件詳細(xì)介紹
在實(shí)際應(yīng)用中我們常常會(huì)遇到監(jiān)聽(tīng)按鍵輸入和鼠標(biāo)點(diǎn)擊事件,下面這篇文章主要給大家介紹了關(guān)于JavaScript事件監(jiān)聽(tīng)之鍵盤(pán)事件的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06