JavaScript 函数来实现 将数字转换为中文大写金额

305 阅读2分钟

将数字转换为中文大写金额的 JavaScript 函数

在日常的软件开发中,经常会遇到将数字转换为中文大写金额的需求,特别是在金融、财务等领域的应用中。为了满足这一需求,我们可以编写一个 JavaScript 函数来实现这个功能。下面是一个简单而实用的函数,可以将给定的数字转换为中文大写金额:

工具方法

/**
 * 将数字转换为中文大写金额
 * @param {number|string} money - 要转换的金额,可以是数字或字符串
 * @returns {string} 返回中文大写金额字符串
 */
export function numberParseChina(money) {
    // 定义中文数字
    const cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
    // 定义中文整数部分的基本单位
    const cnIntRadice = ['', '拾', '佰', '仟'];
    // 定义中文整数部分的扩展单位
    const cnIntUnits = ['', '万', '亿', '兆'];
    // 定义中文小数部分的单位
    const cnDecUnits = ['角', '分', '毫', '厘'];
    // 定义整数金额时后面跟的字符
    const cnInteger = '整';
    // 定义整型完以后的单位
    const cnIntLast = '圆';
    // 最大处理的数字
    const maxNum = 999999999999999.9999;

    // 空字符串返回空
    if (money === '') {
        return '';
    }

    // 将金额转换为数字类型
    money = parseFloat(money);

    // 超过最大处理范围则返回空
    if (money >= maxNum) {
        return '';
    }

    // 金额为0时直接返回
    if (money === 0) {
        return cnNums[0] + cnIntLast + cnInteger;
    }

    // 将金额转换为字符串
    money = money.toString();
    // 分离整数部分和小数部分
    let [integerNum, decimalNum] = money.includes('.') ? money.split('.') : [money, ''];

    // 输出的中文金额字符串
    let chineseStr = '';

    // 处理整数部分
    if (parseInt(integerNum, 10) > 0) {
        // 计算整数部分中零的个数
        const zeroCount = integerNum.split('').reverse().reduce((count, n, i, arr) => {
            const m = (arr.length - 1 - i) % 4;
            const q = Math.floor((arr.length - 1 - i) / 4);
            // 当前数字不为零时添加对应的中文数字和单位
            if (n !== '0') {
                chineseStr += cnNums[parseInt(n)] + cnIntRadice[m] + (m === 0 && count < 4 ? cnIntUnits[q] : '');
                return 0;
            } else {
                // 当前数字为零时,统计零的个数
                return count + 1;
            }
        }, 0);
        // 当整数部分全为零时,添加“零圆”
        if (zeroCount === integerNum.length) {
            chineseStr += cnNums[0] + cnIntLast;
        }
    }

    // 处理小数部分
    if (decimalNum !== '') {
        // 添加小数部分的中文表示
        chineseStr += decimalNum.split('').map((n, i) => {
            // 当小数位不为零时,添加对应的中文数字和单位
            if (n !== '0') {
                return cnNums[parseInt(n)] + cnDecUnits[i];
            }
            return '';
        }).join('');
    }

    // 若金额为整数,则添加“整”字
    return chineseStr === '' ? cnNums[0] + cnIntLast + cnInteger : chineseStr;
}

页面引用

<u-input type="digit" placeholder="请输入要充值的金额" border="none" v-model="money" ></u-input>
{{ numberParseChina(money) }} money  转换的值
import { numberParseChina } from '@/utils/tool';