列表列添加千分位保留两位小数

发布时间:2024年01月22日

在这里插入图片描述

// 千分位无小数部分
function setThousandsMarkNoDecimal(num) {
  // console.log('num????', num, typeof num)
  if (!num) return num;
  let fu = false;
  if (num.toString().includes('-')) {
    fu = true;
    num = Number(num.toString().substr(1));
  }
  // num = Math.trunc(num); // 保留整数部分
  num = num.toFixed(2); // 保留整数部分
  let str = num.toString(); // 数字转字符串
  let str2 = null;
  // 如果带小数点
  if (str.indexOf('.') !== -1) {
    // 带小数点只须要解决小数点右边的
    const strArr = str.split('.'); // 依据小数点切割字符串
    str = strArr[0]; // 小数点右边
    str2 = strArr[1]; // 小数点左边
    //如12345.678  str=12345,str2=678
  }
  let result = ''; // 后果
  while (str.length > 3) {
    // while循环 字符串长度大于3就得增加千分位
    // 切割法 ,从后往前切割字符串 ??
    result = ',' + str.slice(str.length - 3, str.length) + result;
    // 切割str最初三位,用逗号拼接 比方12345 切割为 ,345
    // 用result接管,并拼接上一次循环失去的result
    str = str.slice(0, str.length - 3); // str字符串剥离下面切割的后三位,比方 12345 剥离成 12
  }

  if (str.length <= 3 && str.length > 0) {
    // 长度小于等于3 且长度大于0,间接拼接到result
    // 为什么能够等于3 因为下面result 拼接时候在后面带上了‘,’
    // 相当于123456 上一步解决完之后 result=',456' str='123'
    result = str + result;
  }
  // 最初判断是否带小数点(str2是小数点左边的数字)
  // 如果带了小数点就拼接小数点左边的str2 ??
  str2 ? (result = result + '.' + str2) : '';
  result = fu ? '-' + result : result;
  return result || 0;
}
/**
 *  保留两位小数位
 * @param x "11111.1111"   111
 * @returns 11111.11       111.00
 */
const reserveFloat = (x) => {
  x = x.replace(/[^\d.]/g, ''); //清除"数字"和"."以外的字符
  x = x.replace(/^\./g, ''); //验证第一个字符是数字而不是
  x = x.replace(/\.{2,}/g, '.'); //只保留第一个. 清除多余的
  x = x.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.');
  x = x.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); //只能输入两个小数
  var s = x.toString().split('.');
  if (s.length == 1) {
    x = x.toString() + '.00';
    return x;
  }
  if (s.length > 1) {
    if (s[1].length < 2) {
      x = x.toString() + '0';
    }
    return x;
  }
  return x;
};
// 千分位保留两位小数
export const numSetThousadMark = (num, zeroFiexd, unit) => {
  let str = '';
  if (!unit) {
    unit = '';
  }
  if (isRealNum(num)) {
    if (zeroFiexd === 2) {
      if (+num == 0) {
        str = '0.00' + unit;
      } else if (+num > 0) {
        str = setThousandsMark(reserveFloat(num.toString())) + unit;
      } else if (+num < 0) {
        str = '-' + setThousandsMark(clearFuhao(reserveFloat(num.toString()))) + unit;
      }
    } else {
      if (+num === 0) {
        str = '0' + unit;
      } else if (+num > 0) {
        str = setThousandsMark(num.toString()) + unit;
      } else if (+num < 0) {
        str = '-' + setThousandsMark(clearFuhao(num.toString())) + unit;
      }
    }
  }
  return str;
};
文章来源:https://blog.csdn.net/qiushirufeng/article/details/135744220
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。