大多數語言在處理浮點數的時候都會遇到精度問題,但是在js裡似乎特別嚴重,來看乙個例子
alert(45.6*13);
結果居然是592.800000000001,當然加法之類的也會有這個問題
那這是js的錯誤嗎?
當然不是,你的電腦做著正確的二進位制浮點運算,但問題是你輸入的是十進位制的數,電腦以二進位制運算,這兩者並不是總是轉化那麼好的,有時候會得到正確的結果,但有時候就不那麼幸運了
alert(0.7+0.1);//輸出0.7999999999999999
alert(0.6+0.2);//輸出0.8
你輸入兩個十進位制數,轉化為二進位制運算過後再轉化回來,在轉化過程中自然會有損失了
但一般的損失往往在乘除運算中比較多,而js在簡單的加減法裡也會出現這類問題,你也看到了,這個誤差也是非常小的,但是卻是不該出現的
那該怎麼解決呢,ecma4似乎給了解決方法,但是現在倒不是那麼實用的
一種方法,比如0.7+0.1,先把0.1和0.7都乘10,加完之後再除10
大多數語言在處理浮點數的時候都會遇到精度問題,但是在js裡似乎特別嚴重,來看乙個例子
alert(45.6*13);
結果居然是592.800000000001,當然加法之類的也會有這個問題
那這是js的錯誤嗎?
當然不是,你的電腦做著正確的二進位制浮點運算,但問題是你輸入的是十進位制的數,電腦以二進位制運算,這兩者並不是總是轉化那麼好的,有時候會得到正確的結果,但有時候就不那麼幸運了
alert(0.7+0.1);//輸出0.7999999999999999
alert(0.6+0.2);//輸出0.8
你輸入兩個十進位制數,轉化為二進位制運算過後再轉化回來,在轉化過程中自然會有損失了
但一般的損失往往在乘除運算中比較多,而js在簡單的加減法裡也會出現這類問題,你也看到了,這個誤差也是非常小的,但是卻是不該出現的
那該怎麼解決呢,ecma4似乎給了解決方法,但是現在倒不是那麼實用的
一種方法,比如0.7+0.1,先把0.1和0.7都乘10,加完之後再除10
js中精確計算加法和減法
精確計算加法和減法。例如0.1 0.2 0.3或 0.1 0.2 0.1 function addfn dataone,datatwo if datatwo.tostring split length 2 maxlength math.max lengthone,lengthtwo for var ...
javascript數值精確計算
the function for decimal s add,subtract,multiplication,division.not get the float result.and add the function to number s prototype,so you can use it ...
計算分數精確值
第一周程式設計作業 題目內容 由於計算機內部表達方式的限制,浮點運算都有精度問題,為了得到高精度的計算結果,就需要自己設計實現方法。0,1 之間的任何浮點數都可以表達為兩個正整數的商,為了表達這樣兩個數的商,可以將相除的結果存放在一維陣列中,陣列的每個元素存放一位十進位制數字。即商的第一位存放在第乙...