Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

js 金额转大写

作者:嗜神魔影   发布日期:2025-05-30   浏览:91

function amountToChinese(num) {
    // 定义中文数字和单位
    const cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
    const cnIntRadice = ['', '拾', '佰', '仟'];
    const cnIntUnits = ['', '万', '亿', '兆'];
    const cnDecUnits = ['角', '分', '毫', '厘'];
    const cnInteger = '整';
    const cnIntLast = '元';
    const maxNum = 9999999999999.9999; // 最大处理的数字

    if (num === '') {
        return '';
    }

    num = parseFloat(num);
    if (num >= maxNum) {
        return '超出最大处理数字';
    }

    if (num === 0) {
        return cnNums[0] + cnIntLast + cnInteger;
    }

    let numStr = num.toString();
    let integerNum = parseInt(numStr.split('.')[0]);
    let decimalNum = numStr.split('.')[1];

    let output = '';

    if (integerNum > 0) {
        let zeroCount = 0;
        let IntLen = integerNum.toString().length;
        for (let i = 0; i < IntLen; i++) {
            let n = integerNum.toString().substring(i, i + 1);
            let p = IntLen - i - 1;
            let q = Math.floor(p / 4);
            let m = p % 4;
            if (n === '0') {
                zeroCount++;
            } else {
                if (zeroCount > 0) {
                    output += cnNums[0];
                }
                zeroCount = 0;
                output += cnNums[n] + cnIntRadice[m];
            }
            if (m === 0 && zeroCount < 4) {
                output += cnIntUnits[q];
            }
        }
        output += cnIntLast;
    }

    if (decimalNum) {
        let decLen = decimalNum.length;
        for (let i = 0; i < decLen; i++) {
            let n = decimalNum.substring(i, i + 1);
            if (n !== '0') {
                output += cnNums[n] + cnDecUnits[i];
            }
        }
    }

    if (output.slice(-1) === '整') {
        output += cnInteger;
    } else if (output.indexOf(cnDecUnits[0]) >= 0 || output.indexOf(cnDecUnits[1]) >= 0) {
        output += cnInteger;
    }

    return output;
}

// 示例
console.log(amountToChinese(123456789.89)); // 壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元捌角玖分整

解释说明:

  1. 定义常量cnNums 是中文数字,cnIntRadice 是个、十、百、千的单位,cnIntUnits 是万、亿、兆等大单位,cnDecUnits 是角、分、毫、厘的小单位。
  2. 处理特殊情况:如果输入为空或超过最大处理数字,则返回相应提示。
  3. 分割整数和小数部分:将输入的数字分割成整数部分和小数部分分别处理。
  4. 整数部分转换:遍历整数部分的每一位数字,根据其位置添加相应的中文单位。
  5. 小数部分转换:遍历小数部分的每一位数字,根据其位置添加相应的中文单位。
  6. 最后处理:确保输出格式正确,如“整”的使用。

这个函数可以将任意金额转换为中文大写形式。

上一篇:js 大写字母转小写

下一篇:js 把大写转为小写

大家都在看

js 数组对象排序

js 数组删掉第一个值

js fill

js 数组复制

js 复制数组

js 数组拷贝

js 对象转数组

js 深拷贝数组

js 获取今天年月日

js jsonp

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站