322
汽車大全
JavaScript浮點運算的問題
問題這樣的:37.5*5.5=206.08 (JS算出來是這樣的一個結果,我四舍五入取兩位小數)
我先懷疑是四舍五入的問題,就直接用JS算了一個結果為:206.08499999999998
怎麼會這樣,兩個隻有一位小數的數字相乘,怎麼可能多出這麼小數點出來。
我Google了一下,發現原來這是JavaScript浮點運算的一個bug。
比如:7*0.8 JavaScript算出來就是:5.6000000000000005
解決:
根據網上的方法寫了一個函數:
/** * 四則運算方法 * * @param {} * numA 第一個數字 * @param {} * numB 第二個數字 * @param {} * sign 運算符(+ - * /) */ function calculate(numA,numB,sign) { var m=0,numALen=0,numBLen=0; try{numALen=numA.toString().split(".")[1].length}catch(e){} try{numBLen=numB.toString().split(".")[1].length}catch(e){} if(sign === '+'){ m=Math.pow(10,Math.max(numALen,numBLen)); if(m == 0){ m = 1; } return (numA*m+numB*m)/m; }else if(sign === '-'){ m=Math.pow(10,Math.max(numALen,numBLen)); if(m == 0){ m = 1; } return (numA*m-numB*m)/m }else if(sign === '*'){ m = Math.pow(10,numALen + numBLen) ; if(m == 0){ m = 1; } return Number(numA.toString().replace(".",""))*Number(numB.toString().replace(".",""))/m }else if(sign === '/'){ m = Math.pow(10,numALen - numBLen) ; if(m == 0){ m = 1; } return (Number(numA.toString().replace(".",""))/Number(numB.toString().replace(".","")) )*m; } return 0; }
最後更新:2017-04-03 14:53:40
上一篇:
poj 3006 Dirichlet's Theorem on Arithmetic Progressions 【素數篩】
下一篇:
網絡子係統47_ip內核協議棧藍圖
PostgreSQL 聚合函數講解 - 4 總體協方差, 樣本協方差
VS2010 插件安裝及推薦
[Qt Topic] – 中文化研習,做一個多語言的簡易天氣預報器
終於曉得為什麼招不到程序員啦
Print2Flash出現"System Error. Code:1722. RPC服務器不可用."錯誤解決辦法
收錄高的網站關鍵詞一定要這麼布局
android之自定義ViewGroup和自動換行的布局的實現
高效地顯示Bitmap圖片 4 - 使用ViewPager與GridView顯示圖片
proxool數據庫連接池使用實例
oracle中兩表之間值互相插入和表自身插入值