保留小数点后有效数字4位

保留小数点后有效数字4位,处理小数位过多,大数运算的结果。

注意:如果数字有7.100096,会返回  7.1000 =>7.1  (小数点后四位有效数字,0去掉

复制代码
// 去除多余的0保留特定小数有效数字
export function effective(val: any,nums=4) {//nums 默认保留四位有效数字
  if (!val) return val;
  val = String(val);
  if (val.includes('e')) {
    val = toolNumber(val)
  }
  let dot = val.includes(".");
  if (val == 0 || val === "undefined") {
    return "0";
  } if (dot) {
    let array = val.split(".")[1].split("");
    let start = array.findIndex((item: any)=>item!='0');
    let tempVal = val.slice(0, start+nums + val.split(".")[0].length + 1);
    let str = String(parseFloat(tempVal));
    return str.includes('e') ? tempVal : clearZoo(tempVal); //去除尾部多余的0 
  } else {
    return val;
  }
}
const  toolNumber =(num_str) => {
  num_str = num_str.toString();
  if (num_str.indexOf("+") != -1) {
    num_str = num_str.replace("+", "");
  }
  if (num_str.indexOf("E") != -1 || num_str.indexOf("e") != -1) {
    var resValue = "",
      power = "",
      result = null,
      dotIndex = 0,
      resArr = [],
      sym = "";
    var numStr = num_str.toString();
    if (numStr[0] == "-") {
      // 如果为负数,转成正数处理,先去掉‘-’号,并保存‘-’.
      numStr = numStr.substr(1);
      sym = "-";
    }
    if (numStr.indexOf("E") != -1 || numStr.indexOf("e") != -1) {
      var regExp = new RegExp(
        "^(((\\d+.?\\d+)|(\\d+))[Ee]{1}((-(\\d+))|(\\d+)))$",
        "ig"
      );
      result = regExp.exec(numStr);
      if (result != null) {
        resValue = result[2];
        power = result[5];
        result = null;
      }
      if (!resValue && !power) {
        return false;
      }
      dotIndex = resValue.indexOf(".") == -1 ? 0 : resValue.indexOf(".");
      resValue = resValue.replace(".", "");
      resArr = resValue.split("");
      if (Number(power) >= 0) {
        var subres = resValue.substr(dotIndex);
        power = Number(power);
        //幂数大于小数点后面的数字位数时,后面加0
        for (var i = 0; i <= power - subres.length; i++) {
          resArr.push("0");
        }
        if (power - subres.length < 0) {
          resArr.splice(dotIndex + power, 0, ".");
        }
      } else {
        power = power.replace("-", "");
        power = Number(power);
        //幂数大于等于 小数点的index位置, 前面加0
        for (var i = 0; i < power - dotIndex; i++) {
          resArr.unshift("0");
        }
        var n = power - dotIndex >= 0 ? 1 : -(power - dotIndex);
        resArr.splice(n, 0, ".");
      }
    }
    resValue = resArr.join("");

    return sym + resValue;
  } else {
    return num_str;
  }
}
复制代码

 

posted @   小不点灬  阅读(1529)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示