Encapsulate a Js method that handles the amount

/**
 * 将数值四舍五入后转换成金额格式
 * @param  {number} num 数值(Number或者String)
 * @param  {number} precision 保留几位小数,默认为2
 * @param  {string} separator 分隔符,默认为"."
 * @return {string} 金额格式的字符串,如'1,234,567.45'
 */
function formatMoney(num, precision = 2, separator = '.') {
  // 将字符串类型的数字转换为 Number 类型
  num = Number(num);
  // 判断传进来的值是否为数字类型,如果不是,直接返回空字符串
  if (isNaN(num)) {
    return '';
  }
  // 对数值进行四舍五入
  num = Math.round(Math.abs(num) * Math.pow(10, precision)) / Math.pow(10, precision);
  // 将数值转换为字符串,并根据小数点进行分割
  let [integerPart, decimalPart] = num.toString().split('.');
  // 对整数部分进行处理,将数字逐三分割,并在分割位置添加分隔符
  integerPart = integerPart.replace(/(d)(?=(d{3})+$)/g, '$1' + separator);
  // 如果没有小数部分,则直接返回整数部分
  if (!decimalPart) {
    return integerPart;
  }
  // 否则返回整数部分和小数部分的拼接结果
  return `${integerPart}${separator}${decimalPart}`;
}

Example usage:

console.log(formatMoney(1234567.89)); // Output: 1,234,567.89
console.log(formatMoney(1234567.896, 3, ',')); // Output: 1,234,567.896
console.log(formatMoney('1234567.89')); // Output: 1,234,567.89
console.log(formatMoney('invalid value')); // Output: ''
 

Guess you like

Origin blog.csdn.net/congxue666/article/details/130290444