js 取小数点后几位方法

本文介绍了JavaScript中处理小数的多种方法,包括使用Number的toFixed()方法进行四舍五入,解决toFixed()方法的小数进位及精度问题,以及如何通过Math.round()实现小数的精确处理等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 取后两位 为例:

四舍五入

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%

复制代码
  1. 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 += '0';
    }
    return tarStr;
}

复制代码

不四舍五入

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
    // 如果是负数,先转换为正数再计算,最后转回负数

复制代码

转载于:https://juejin.im/post/5b484bbbe51d45198b6c78b7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值