js中float型別加減乘除運算精度問題
阿新 • • 發佈:2019-01-04
js裡邊取float數的精度的方法 toFixed()
toFixed() 方法可把 Number 四捨五入為指定小數位數的數字。
toFixed() 裡面的數為 0- 20 之間的整數。
var a = 1.23456
a.toFixed(2) = 1.23
toFixed 方法有bug,不同的瀏覽器對它的解析不一樣。比如,0.009.toFixed(2)在firefox下 為0.01 而在IE7下為
0.00。
解決辦法:
重寫
Number.prototype.toFixed = function ( exponent)
{ return parseInt( this * Math.pow( 10 , exponent) + 0.5 )/Math.pow(10,exponent);
}
遇到要在頁面上計算報銷金額-借款金額=應付金額。這三個金額都是Float型。
但發現js計算float的加減會出現精度不準確問題。
解決方案:
第一種是按小數點分隔,分別計算小數點前面那部分的值和小數點後面那部分的值。
此方法有點繁瑣。
第二種方法是該float乘以10的n次方(n為小數位數),即把該float放大為整型再進行加或減運算,然後再將得到結果除以10的n次方,toFied(n)取得需要的小數位數。