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;
}
posted @ 2024-07-26 11:46  行走的蒲公英  阅读(198)  评论(0编辑  收藏  举报