/**
* 将数值四舍五入后转换成金额格式
* @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}`;
}
使用示例:
console.log(formatMoney(1234567.89)); // 输出:1,234,567.89
console.log(formatMoney(1234567.896, 3, ',')); // 输出:1,234,567.896
console.log(formatMoney('1234567.89')); // 输出:1,234,567.89
console.log(formatMoney('invalid value')); // 输出:''