JavaScript 四捨五入、無條件捨去、無條件進位


Math.round() 四捨五入

Math.round(3.14)      // 3
Math.round(5.49999)   // 5
Math.round(5.5)       // 6
Math.round("5.50001") // 6
Math.round(-5.49999)  // -5
Math.round(-5.5)      // -5
Math.round(-5.50001)  // -6
Math.round(18.62645 * 10) / 10     // 18.6
Math.round(18.62645 * 100) / 100   // 18.63
Math.round(18.62645 * 1000) / 1000 // 18.626

Math.floor() 最大整數

返回小於或等於給定數字,取小於這個數的最大整數。

Math.floor(3.14)   // 3
Math.floor(5.4)    // 5
Math.floor(-5.4)   // -6
Math.floor("-5.5") // -6

Math.ceil() 最小整數

返回大於或等於給定數字,取大於這個數的最小整數。

Math.ceil(3.14)   // 4
Math.ceil(5.4)    // 6
Math.ceil(-5.4)   // -5
Math.ceil("-5.5") // -5

JavaScript 四捨五入、線上測試

4
Math.round(n)Math.floor(n)Math.ceil(n)


Math.trunc() 去掉小數部分

將數字的小數部分去掉,只保留整數部分。傳回值:給定數字的整數部分。ECMA-262

Math.trunc(13.37)    // 13
Math.trunc(42.84)    // 42
Math.trunc(0.123)    //  0
Math.trunc(-0.123)   // -0
Math.trunc("-1.123") // -1

Polyfill

if (!Math.trunc) {
  Math.trunc = function (v) {
    v = +v;
    return (v - v % 1) || (!isFinite(v) || v === 0 ? v : v < 0 ? -0 : 0);
  };
}




帶小數的四捨五入

let roundDecimal = function (val, precision) {
  return Math.round(Math.round(val * Math.pow(10, (precision || 0) + 1)) / 10) / Math.pow(10, (precision || 0));
}
roundDecimal(18.62645, 2) // 18.63
roundDecimal(18.62645, 3) // 18.626
roundDecimal(18.62645, 4) // 18.6265


數字千分位

function FormatNumber(n) {
  n += "";
  let arr = n.split(".");
  let re = /(\d{1,3})(?=(\d{3})+$)/g;
  return arr[0].replace(re, "$1,") + (arr.length == 2 ? "." + arr[1] : "");
}

JavaScript 數字千分位、線上測試

798,736.325
Examination


Number.prototype.toFixed

以字符串返回希望的格式,精確到「小數點」後的數字。依格式數字會四捨五入,且小數部分依指定的長度將用零填充。

let numObj = 12345.6789
numObj.toFixed()    // '12346'         四捨五入,無小數部分
numObj.toFixed(1)   // '12345.7'       四捨五入
numObj.toFixed(6)   // '12345.678900'  用零填充
(36).toFixed(6)     // '36.000000'
(1200).toFixed(6)   // '1200.000000'
(580.5).toFixed(6)  // '580.500000'

let numObj = 5.123456;
numObj.toFixed()      // 5  (差異)
numObj.toFixed(1)     // 5.1
numObj.toFixed(2)     // 5.12
numObj.toFixed(3)     // 5.123
numObj.toFixed(4)     // 5.1235
numObj.toPrecision()  // 5.123456  (差異)
numObj.toPrecision(1) // 5
numObj.toPrecision(2) // 5.1
numObj.toPrecision(3) // 5.12
numObj.toPrecision(4) // 5.123


帶小數的對整齊

如果輸出多個帶數位的值,且小數位長度不同列於一容器內可用 .toFixed 用零填充來處理。

function financial(x) {
  return Number.parseFloat(x).toFixed(3);
}
526.120
 36.784
162.500
  3.416


數學函數

Math.abs() 絕對值

絕對值(正值)取參數的絕對值。參數可以是數值亦可以是一個「數值」的字串。

Math.round(3.14)   // 3
Math.abs("-12")    // 12
Math.abs("-0012")  // 12
Math.abs(-12)      // 12
Math.abs("00.032") // 0.032
Math.abs("24-5")   // NaN
Math.abs("Hello")  // NaN


判斷指定的數字是正數,負數還是零。

Math.sign(-1);   // -1
Math.sign(-1.5); // -1
Math.sign(-0);   // 0
Math.sign(0);    // 0
Math.sign(1);    // 1
Math.sign(1.5);  // 1