首先寫一個demo 重現問題,我使用的是一個js在線測試環境[打開]
改寫displaynum()函數
function displaynum(){var num = 22.77;alert(num + 10);}
點擊Show按鈕 結果顯示32.769999999996 出現了N多小數.
也並不是所有數字都會出現這種現象, 除了 22.99 2.777 , 好像這幾個數字也沒什麼特殊.
查了一些資料, 一是JS浮點數計算的bug, 另一個是和計算機最終轉換成二進制計算有關系, 但是為什麼不是所有小數都會有這種現象, 目前我也不清楚, 有時間再去深入研究一下。
現在有兩種解決方法, 第一種就是利用JS .toFixed(n) 方法, 直接獲取n位小數, 個人覺得這種方法在數據精度上會有一些問題. 如果數據精度要求不高的話 可以使用. 第二種方法就是自己寫js 運算方法.
以下是自定義加法函數, 使用此方法進行相加會避免上面問題。
function addNum(num1,num2){var sq1,sq2,m;try{sq1=num1.toString().split(".")[1].length;} catch(e){sq1=0;}try{sq2=num2.toString().split(".")[1].length;} catch(e){sq2=0;}m=Math.pow(10,Math.max(sq1,sq2));return ( num1 * m + num2 * m ) / m;}
當然簡單一點也可以寫成 alert((num * 3 + 10 * 3) /3); 這樣也不會出現n多小數。
alert((num * 3 + 10 * 3) /3); 與 alert(num + 10); 這兩種寫法計算機在底層轉換成二進制運算是有區別的, 或許這就是出現上述問題的原因
以上這篇js小數計算小數點後顯示多位小數的實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持。