在JavaScript中,你可以通过编写一个函数来格式化金额,使其可选地包含千分位分隔符,并保留指定的精度。以下是一个示例函数,它接受三个参数:金额(`amount`)、是否带千分位(`withCommas`,默认为`true`),以及要保留的小数位数(`precision`,默认为`2`):
function formatMoney(amount, withCommas = true, precision = 2) {
// 首先,将金额转换为字符串,并去除任何非数字字符
let formatted = amount.toString().replace(/[^0-9.-]/g, '');
// 分离整数部分和小数部分
let [integerPart, decimalPart = ''] = formatted.split('.');
// 如果需要千分位分隔符
if (withCommas) {
// 从后往前插入逗号,每三位插入一个
integerPart = integerPart.split('').reverse().join('').replace(/(\d{3})(?=\d)/g, '$1,').split('').reverse().join('');
}
// 处理小数部分,保留指定的精度
decimalPart = decimalPart.slice(0, precision);
// 如果小数部分长度小于指定的精度,则用0填充
while (decimalPart.length < precision) {
decimalPart += '0';
}
// 拼接整数部分和小数部分,并返回
return `${integerPart}${decimalPart.length ? '.' + decimalPart : ''}`;
}
// 使用示例
console.log(formatMoney(1234567.89)); // "1,234,567.89"
console.log(formatMoney(1234567.89, false)); // "1234567.89"
console.log(formatMoney(1234567.89, true, 0)); // "1,234,568"
这个函数首先清理输入金额字符串,去除非数字字符。然后,根据是否需要千分位分隔符来格式化整数部分。接着,处理小数部分,保留指定的精度,并用0填充不足的部分。最后,将整数部分和小数部分拼接起来并返回。