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

js 数字转大写

作者:花折亦无情   发布日期:2025-04-12   浏览:64

function numberToChinese(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 IntegerNum; // 整数部分
    let DecimalNum; // 小数部分
    let ChineseStr = ''; // 输出的中文大写字符串
    let parts; // 分离整数和小数部分

    if (num.toString().indexOf('.') === -1) {
        IntegerNum = num;
        DecimalNum = '';
    } else {
        parts = num.toString().split('.');
        IntegerNum = parts[0];
        DecimalNum = parts[1].substr(0, 4);
    }

    if (parseInt(IntegerNum, 10) > 0) {
        let zeroCount = 0;
        let IntLen = IntegerNum.length;
        for (let i = 0; i < IntLen; i++) {
            let n = IntegerNum.substr(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) {
                    ChineseStr += cnNums[0];
                }
                zeroCount = 0;
                ChineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
            }
            if (m === 0 && zeroCount < 4) {
                ChineseStr += cnIntUnits[q];
            }
        }
        ChineseStr += cnIntLast;
    }

    if (DecimalNum !== '') {
        let decLen = DecimalNum.length;
        for (let i = 0; i < decLen; i++) {
            let n = DecimalNum.substr(i, 1);
            if (n !== '0') {
                ChineseStr += cnNums[parseInt(n)] + cnDecUnits[i];
            }
        }
    }

    if (ChineseStr === '') {
        ChineseStr += cnNums[0] + cnIntLast + cnInteger;
    } else if (DecimalNum === '') {
        ChineseStr += cnInteger;
    }

    return ChineseStr;
}

// 示例
console.log(numberToChinese(123456789)); // "一十二亿三千四百五十六万七千八百九十九元整"
console.log(numberToChinese(100101)); // "一十万零一百零一元整"
console.log(numberToChinese(0.1)); // "零元一角"

解释说明:

  1. 函数定义numberToChinese 函数用于将阿拉伯数字转换为中文大写金额。
  2. 常量定义:定义了中文数字、单位(整数部分和小数部分)以及一些辅助变量。
  3. 特殊情况处理:处理空输入、超大数字和零的情况。
  4. 分离整数和小数部分:通过 split 方法将数字分为整数和小数部分。
  5. 整数部分转换:遍历整数部分,根据位数和数值添加对应的中文字符,并处理连续的零。
  6. 小数部分转换:遍历小数部分,直接将非零数字转换为对应的中文字符。
  7. 最终输出:根据转换结果,添加必要的单位并返回最终的中文大写金额。

示例代码展示了如何使用该函数进行转换,并输出了几个示例结果。

上一篇:js 数组map

下一篇:js 大小写转换

大家都在看

js 数组对象排序

js 数组删掉第一个值

js fill

js 数组复制

js 复制数组

js 数组拷贝

js 对象转数组

js 深拷贝数组

js 获取今天年月日

js jsonp

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

Laravel 中文站