Math.Round()函數,能夠對一個浮點數進行四舍五入,但是返回的結果是個整數,無法精確到小數點后,比如0.123,Math.round()返回0。
Number.toFixed()方法,能保留小數點后面的指定位數,但如果執行 5.1.toFixed(2)
的話,會返回5.10,而不是我們期待的5.1,所以,這個方法也不太可取。
最簡單實現的方法是,假設我要對0.409進行四舍五入並保留兩位小數,如果直接調用Math.round()的話,結果是0,如果直接調用.toFixed(2)方法的話,會返回0.40,最簡單有效的方法就是對0.409先乘以100,再調用Math.round(),然后再除以100,就OK了。
var number = 0.409; alert(Math.round(number * 100) / 100); //輸出0.41
如上,如果是三位小數
Math.round(number * 1000) / 1000)
不確定是多少位小數,則寫一個方法
// num為傳入的值,n為保留的小數位 function fomatFloat(num,n){ var f = parseFloat(num); if(isNaN(f)){ return false; } f = Math.round(num*Math.pow(10, n))/Math.pow(10, n); // n 冪 var s = f.toString(); var rs = s.indexOf('.'); //判定如果是整數,增加小數點再補0 if(rs < 0){ rs = s.length; s += '.'; } while(s.length <= rs + n){ s += '0'; } return s; }
以上代碼將數值和需要保留位數傳入fomatFloar函數中,並判定如果不足長度時補0