Contents
  1. 1. 取后两位 为例:
    1. 1.1. 四舍五入
      1. 1.1.1. 1.toFixed()
      2. 1.1.2. 2.Math.round()
    2. 1.2. 不四舍五入
      1. 1.2.1. 1.先把小数取整 在计算
      2. 1.2.2. 2.使用正则表达式

取后两位 为例:

四舍五入

1.toFixed()

Number的toFixed()方法可把 Number 四舍五入为指定小数位数的数字。


const test = 1.12 / 3   // 0.37333333333333335
console.log(test.toFixed(2))  // 0.37
注意: .兼容问题

/**
 * firefox/chrome ie某些版本中,对于小数最后一位为 5 时进位不正确(不进位)。
 * 修复方式即判断最后一位为 5 的,改成 6, 再调用 toFixed
 */
function(number, precision) {
    const str = number + '';
    const len = str.length;
    let last = str[len - 1]  // 或者 str.substr(len - 1, len);
    if(last == '5') {
        let = '6';
        str = str.substr(0, len - 1) + last;
        return (str - 0).toFixed(precision)
    } else {
        return number.toFixed(precision)
    }
}

或者为:
function toFixed(number, precision) {
    const tempCount = Math.pow(10, precision);
    let target = number * tempCount + 0.5;
    target = parseInt(des, 10) / tempCount;
    return target + '';
}

.精确问题


/**
 * toFixed 有时候会碰到如下精度缺失问题
 * 可以使用下面例子的方法解决
 * 或者 (test * 100).toFixed(2) + '%';
 */
const test = 1.12 / 3   // 0.37333333333333335
console.log(test.toFixed(4))  // 0.3733
console.log((test).toFixed(4) * 100 + '%')  // 37.330000000000005%

2.Math.round()


/**
 * 利用Math.round  
 * 保留两位小数
 */
  function toDecimal(num) {
    let tar = parseFloat(num);
    if (isNaN(tar)) { return };
    tar = Math.round(num * 100) / 100;
  }


/**
 * 利用Math.round 强制保留两位小数 10 则为 10.00
 * 保留两位小数
 */

function toDecimal(num) {
    let tar = parseFloat(num);
    if (isNaN(tar)) {return};
    tar = Math.round(num * 100) / 100;

    let tarStr = tar.toString();
    let decIndexOf = tarStr.indexOf('.');
    if(decIndexOf < 0) {
        tarStr += '.';
        decInexOf = tarStr.length;
    }
    while (tarStr.length <= decindexof="" +="" 2)="" {="" tarstr="" ;="" }="" return="" tarstr;="" <="" code="">

不四舍五入

1.先把小数取整 在计算


    const test = 1.12 / 3   // 0.37333333333333335
    Math.floor(test * 100) / 100  // floor 是向下取整 0.37

2.使用正则表达式


    const test = 1.12 / 3   // 0.37333333333333335
    let target = test + ''  // test.toString()
    target = target.match(/^\d+(?:\.\d{0, 2}?/) 
    //输出结果为 0.37。但整数如 10 必须写为10.0000
    // 如果是负数,先转换为正数再计算,最后转回负数

Contents
  1. 1. 取后两位 为例:
    1. 1.1. 四舍五入
      1. 1.1.1. 1.toFixed()
      2. 1.1.2. 2.Math.round()
    2. 1.2. 不四舍五入
      1. 1.2.1. 1.先把小数取整 在计算
      2. 1.2.2. 2.使用正则表达式