js格式化金额可选是否带千分位以及保留精度


在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填充不足的部分。最后,将整数部分和小数部分拼接起来并返回。