JavaScript 四捨五入、无条件捨去、无条件进位

JavaScript 是广泛必威体育手机客户端上使用的程式语言,可以对数字进行各种运算和操作。其中对数字进行四捨五入、无条件捨去、无条件进位等处理都属于 Math 物件的静态方法。可以在运算数字后面加上 .toFixed() 的方法以字串的形式回传指定小数位数的近似值,并且採用四捨六入五留双的规则。


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



Visual Basic 四捨五入计算

Visual Basic 来进行四捨五入的计算,四捨五入 Rounding 在 VB 要做到四捨五入的功能应该用 Format 函数用 CInt 或 CLng 都只能取到整数部分,而用 Format 函数可以取到指定的小数位数。