js实现数字金额转换为对应的大写金额(精确到小数点后两位,支持负数金额的转换)

####数字金额转换为对应的大写金额代码实现如下:

export function convertMoney(money) {
    //汉字的数字
    var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
    //基本单位
    var cnIntRadice = new Array('', '拾', '佰', '仟');
    //对应整数部分扩展单位
    var cnIntUnits = new Array('', '万', '亿', '兆');
    //对应小数部分单位
    var cnDecUnits = new Array('角', '分');
    //整数金额时后面跟的字符
    var cnInteger = '整';
    //整型完以后的单位
    var cnIntLast = '元';
    // 如果为负数
    var cnIntMinus = '负';
    // 负号处理后的数字
    var cash;
    //分离金额后用的数组,预定义
    var parts;
    //金额整数部分
    var integerNum;
    //金额小数部分
    var decimalNum;
    //输出的中文金额字符串
    var chineseStr = '';

    // 判断空
    if (money == "") {
      return "";
    }
    // 判断正负
    if(money.charAt(0) === "-"){
        // chineseStr += cnIntMinus;
        cash = money.slice(1);
    }else{
        cash = money;   
    }
    // 转换为浮点数类型,会自动去掉首尾的0
    cash = parseFloat(cash);
    if (cash == 0) {
      chineseStr = cnNums[0] + cnIntLast + cnInteger;
      return chineseStr;
    }

    // 转换为字符串
    cash = cash.toString();
    if (cash.indexOf('.') == -1) {
        integerNum = cash;              //金额整数部分
        decimalNum = '';                //金额小数部分
    } else {
        parts = cash.split(".");
        integerNum = parts[0];                      //金额整数部分
        decimalNum = parts[1].substr(0, 2);         //金额小数部分
    }

    // 转换整数部分
    if (integerNum != '-' && parseInt(integerNum, 10) > 0) {
      var intLen = integerNum.length;
      var zero = 0; //标记零出现次数
      for (let i = 0; i < intLen; i++) {
        var intChar = integerNum.substr(i, 1);
        var intSlen = intLen - i - 1;
        var divided = intSlen / 4;
        var remain = intSlen % 4;

        if (intChar == "0") {
          zero++;
        } else {
          if (zero > 0) {
            chineseStr += cnNums[0];
          }
          zero = 0;
          chineseStr += cnNums[parseInt(intChar)] + cnIntRadice[remain];
        }
        if (remain === 0 && divided > 0) {
          chineseStr += cnIntUnits[divided];
        }
      }
      chineseStr += cnIntLast; //加上'元'字
    }

    if (decimalNum != ''){      // 小数部分存在时
        var decLen = decimalNum.length;
        for(let i=0; i<decLen; i++){
            var decChar = decimalNum.substr(i,1);
            if(decChar != '0'){
                chineseStr += cnNums[parseInt(decChar)] + cnDecUnits[i];
            }
            if (decChar == '0' && parseInt(integerNum, 10) > 0){
                chineseStr += cnNums[parseInt(decChar)] + cnDecUnits[i];
            }
        }
    }else{
        chineseStr += cnInteger;
    }
    return chineseStr;
}

####效果图如下:
这里写图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以回答这个问题。以下是将数字金额转换为中文大写金额的JavaScript代码: ```javascript function convertToChineseNumeral(amount) { const chineseNumeral = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]; const chineseUnit = ["", "拾", "佰", "仟"]; const chineseBigUnit = ["", "萬", "亿", "兆"]; let num = parseFloat(amount); let chineseAmount = ""; if (isNaN(num)) { return ""; } let isNegative = num < 0; if (isNegative) { num = -num; } let fraction = Math.round((num - Math.floor(num)) * 100); if (fraction == 0) { chineseAmount += "整"; } else { chineseAmount += chineseNumeral[Math.floor(fraction / 10)] + "角"; chineseAmount += chineseNumeral[fraction % 10] + "分"; } num = Math.floor(num); let unitIndex = 0; while (num > 0) { let currentUnit = ""; for (let i = 0; i < 4 && num > 0; i++) { let currentNumeral = num % 10; if (currentNumeral > 0) { currentUnit = chineseUnit[i] + currentUnit; currentUnit = chineseNumeral[currentNumeral] + currentUnit; } else if (currentUnit != "") { currentUnit = chineseNumeral[currentNumeral] + currentUnit; } num = Math.floor(num / 10); } if (currentUnit != "") { currentUnit += chineseBigUnit[unitIndex]; } chineseAmount = currentUnit + chineseAmount; unitIndex++; } if (chineseAmount == "") { chineseAmount = chineseNumeral[0]; } if (isNegative) { chineseAmount = "负" + chineseAmount; } return chineseAmount; } console.log(convertToChineseNumeral(123456789.01)); // 壹亿贰仟叁佰肆拾伍萬陆仟柒佰捌拾玖元零壹分 ``` 希望这个代码能帮到你。如果你有其它问题,欢迎继续询问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值