常见正则处理

303 阅读1分钟
  1. 解决js计算的精度问题 

分转元

const regFenToYuan = fen => {
  var num = fen;
  num = fen * 0.01;
  num += "";
  var reg = num.indexOf(".") > -1 ? /(\d{1,3})(?=(?:\d{3})+\.)/g : /(\d{1,3})(?=(?:\d{3})+$)/g;
  num = num.replace(reg, "$1");
  num = toDecimal2(num);
  return num;
};

元转分, digit精度

const regYuanToFen = (yuan, digit) => {
  var m = 0,
    s1 = yuan.toString(),
    s2 = digit.toString();
  try {
    m += s1.split(".")[1].length;
  } catch (e) {}
  try {
    m += s2.split(".")[1].length;
  } catch (e) {}
  return (
    (Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) /
    Math.pow(10, m)
  );
};

2、只能输入数字或小数(保留一位小数)

const onlyNonNegative = (val) => {
  //清除“数字”和“.”以外的字符
  val = val.replace(/[^\d.。]/g, "");
  // 把。换成.
  val = val.replace(/\。/g, ".");
  //只保留第一个. 清除多余的
  val = val.replace(/\.{2,}/g, ".");
  val = val.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
  //只能输入一个小数
  val = val.replace(/^(\-)*(\d+)\.(\d).*$/, '$1$2.$3');
  //以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02
  if(val.indexOf(".") < 0 && val != "" && val > 0) { 
    val = parseFloat(val);
  }

  return val;
}

3、强制保留2位小数

// 强制保留2位小数,如:2,会在2后面补上00.即2.00
const toDecimal2 = (x) => {
  var f = parseFloat(x);
  if (isNaN(f)) {
    return false;
  }
  var f = Math.round(x * 100) / 100;
  var s = f.toString();
  var rs = s.indexOf('.');
  if (rs < 0) {
    rs = s.length;
    s += '.';
  }
  while (s.length <= rs + 2) {
    s += '0';
  }
  return s;
}