封装全局函数,对金额类型的数据,保存位数,自动补零

这篇博客主要介绍了两个JavaScript函数,amountTranslate和reAmountTranslate,用于数值的转换和格式化。amountTranslate函数处理数字,单位,小数位数等,进行四舍五入并添加千位分隔符。reAmountTranslate函数则对包含逗号的数字进行处理,根据单位(如万元)调整小数点位置,并确保符合指定的小数位数。这两个函数对于财务或者数据展示场景非常实用。
export default function amountTranslate(
  number,
  unit,
  decimals = 2,
  dec_point = ".",
  thousands_sep = ","
) {
  if (typeof number === "undefined" || number === null) {
    return "-";
  } else {
    number = (number + "").replace(/[^0-9+-Ee.]/g, "");
    var n = !isFinite(+number) ? 0 : +number,
      prec = !isFinite(+decimals) ? 2 : Math.abs(decimals),
      sep = typeof thousands_sep === "undefined" ? "," : thousands_sep,
      dec = typeof dec_point === "undefined" ? "." : dec_point,
      s = "",
      toFixedFix = function (n, prec) {
        // 本身数据就有2位小数点,不截取了,直接返回
        return "" + n;
        // var k = Math.pow(10, prec)
        // return '' + Math.floor(n * k) / k
      };

    s = (prec ? toFixedFix(n, prec) : "" + Math.round(n)).split(".");
    var re = /(-?\d+)(\d{3})/;
    while (re.test(s[0])) {
      s[0] = s[0].replace(re, "$1" + sep + "$2");
    }

    if ((s[1] || "").length < prec) {
      s[1] = s[1] || "";
      s[1] += new Array(prec - s[1].length + 1).join("0");
    }
    return s.join(dec) + unit;
  }
}

export function reAmountTranslate(data, unit = "") {
  if (typeof data === "undefined" || data === null) {
    return data;
  }
  let newData = "" + data;
  if (newData.includes("|")) {
    let dataArray = newData.split("|").map(item => {
      return reAmountTranslate(item);
    });
    return dataArray.join("|");
  }
  let index = newData.indexOf(",");
  let dataArray = newData.split(".");
  let xs;
  if (dataArray[1] === undefined) {
    let decimals = unit === "万元" ? "000000" : "00";
    xs = decimals;
  } else {
    xs = dataArray[1];
    let dec = unit === "万元" ? 6 : 2;
    xs = xs.padEnd(dec, "0");
  }
  if (unit === "万元") {
    xs = Array.from(xs);
    xs.splice(4, 0, ".");
    xs = xs.join("");
  } else {
    xs = "." + xs;
  }
  dataArray.splice(1, 1, xs);
  newData = dataArray.join("");
  while (index !== -1) {
    newData = newData.substring(0, index) + newData.substring(index + 1);
    index = newData.indexOf(",");
  }
  return newData;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值