js保留指定有效小数位数

该文章提供了一个JavaScript函数,用于处理数字,根据其整数部分决定保留的小数位数。如果整数部分为0,则保留小数点后两位有效数字;否则,保留两位小数。函数涉及到四舍五入的逻辑,并提供了辅助函数进行小数部分的处理。

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

js保留指定有效小数位数

最近有个需求是 判断整数部分是否为0, 大于0则保留2位小数, 是0,取小数点后两位有效数(0不是有效数), 0.0109 -> 0.011
在网上找不到解决方法, 以下是自己实现的方法:

 /*
    判断整数部分是否为0,   大于0则保留2位小数,   是0,取小数点后两位有效数(0不是有效数),    0.0109 -> 0.011
    * ping: 要处理的数
    * places: 要保留的有效小数位
  */
  function handleDecimalParts(ping, places) {
    // 1. 判断整数部分是否为0
    const res = parseInt(ping);
    var residue = "";
    // 保留部分
    var handleRes = [];
    var finalRes = "";
    if (res == 0) {
      ping = ping + "";
      // 包含小数点
      if (ping.indexOf(".") != -1) {
        // 保留小数点后两位有效数字
        var pingArr = ping.split(".");
        // 取小数部分
        const decimalPart = pingArr[1];
        residue = getResidue(2, decimalPart, handleRes);

        // 判断是否需要四舍五入
        if (residue && residue[0] >= 5) {
          var val1 = ["1"];
          for (var i = 0; i < handleRes.length; i++) {
            val1.push("0");
          }
          let multiplier = +val1.join("");

          // 需要四舍五入
          let joinStr = handleRes.join("");
          joinStr = "0." + joinStr;
          joinStr = +joinStr;

          // 进位+1
          let temp = joinStr * multiplier + 1;

          // 最终结果
          finalRes = temp / multiplier;
        } else {
          var val1 = ["1"];
          for (var i = 0; i < handleRes.length; i++) {
            val1.push("0");
          }
          let multiplier = +val1.join("");

          // 需要四舍五入
          let joinStr = handleRes.join("");
          joinStr = "0." + joinStr;
          joinStr = +joinStr;

          // 进位+1
          let temp = joinStr * multiplier;

          // 最终结果
          finalRes = temp / multiplier;
        }
      }
    } else {
      console.log("存在整数部分:保留两位小数" + ping);
      //Number(ping).toFixed(2);
      finalRes = roundFun(Number(ping), 2);
    }

    console.log("-----最终结果--------" + finalRes);
    return finalRes;
  }
  //保留n位小数
  function roundFun(value, n) {
    return Math.round(value * Math.pow(10, n)) / Math.pow(10, n);
  }
  /*对小数部分进行处理*/
  function getResidue(places, decimalPart, handleRes) {
    let residue = decimalPart;
    for (var i = 0; i < places; i++) {
      // 取出小数部分到第一个不是0的位置
      for (var j = 0; j < residue.length; j++) {
        if (residue[j] != 0) {
          residue = residue.substr(j);
          break;
        } else {
          handleRes.push(residue[j]);
        }
      }

      if (residue) {
        handleRes.push(residue[0]);
        residue = residue.substr(1);
      }
    }
    return residue;
  }
  • 调用
const res = handleDecimalParts(0.0109, 2);
console.log(res)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码工人笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值