js格式化金额 - 数字千分化
方法1
/** * 格式化金额 - 数字千分化,保留两位小数 * @param {number | string} num - 输入的数字或字符串 * @returns {string} - 格式化后的金额字符串,空值时返回 '0.00' */ export function numToMoney(num) { // 检查输入是否为空或无效数字 if (num === null || num === undefined || num === '' || isNaN(Number(num))) { return '0.00'; // 空值或非法数字返回 0.00 } // 转换为数字类型并处理精度问题 let value = Math.round(Number(num) * 100) / 100; // 先放大100倍取整,避免浮点数精度问题 let [integerPart, decimalPart] = value.toString().split('.'); // 分割整数和小数部分 // 如果小数部分不存在,补全为两位 decimalPart = decimalPart ? decimalPart.padEnd(2, '0') : '00'; // 对整数部分进行千分位格式化 const formattedInteger = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ','); // 合并结果并返回 return `${formattedInteger}.${decimalPart}`; }
方法2
/** * 格式化金额 - 数字千分化 * @param {number | string} num - 输入的数字或字符串 * @returns {string} - 格式化后的金额字符串,空值时返回 '-' */ export function numToMoney(num) { // 检查输入是否为空 if (num === null || num === undefined || num === '') { return '-'; } // 将输入的数字转换为字符串 const str = num.toString(); // 分离整数部分和小数部分 const [integerPart, decimalPart] = str.split('.'); // 处理整数部分,千分位分隔 const formattedInteger = integerPart .split('') .reverse() .reduce((prev, next, index) => { return (index % 3 ? next : next + ',') + prev; }); // 合并整数部分和小数部分 return decimalPart ? `${formattedInteger}.${decimalPart}` : formattedInteger; }