阿拉伯数字转人民币大写

本文介绍了一种使用JavaScript将数字金额转换为汉字大写的通用方法,适用于从一分到千万亿的不同数值,涵盖整数及小数部分的精确转换。

从一分到千万亿,下面是js的实现,其他语言改一改就好

//入参形如`100`, `100.00`
amountCaptial(amountStr) {
   amountStr = amountStr + (amountStr.indexOf('.') >= 0 ? '0000' : '.0000');
   let caps = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
   let units = ['', '拾', '佰', '仟',];
   let fpt = amountStr.substr(amountStr.indexOf('.') + 1);
   let parseKilo = function (num, unit/*单位*/, hasContext/*是否有上下文(加0)*/, forceUnit) {
       let position = 0;
       let result = '';
       for (; num >= 1; num /= 10, position++) {
           let oct = parseInt(num % 10);
           if (oct !== 0)
               result = caps[oct] + units[position] + result;
           else if (result.length > 0 && result.charAt(0) !== '零')
               result = '零' + result;
       }
       return (
           result.length > 0
               ? ((num < 1000 && hasContext ? '零' : '') + result + unit)
               : (forceUnit ? unit : '')
       );
   };
   return (
       parseKilo((amountStr / 1e12) % 1e4, '万', false, false)//万亿
       + parseKilo((amountStr / 1e8) % 1e4, '亿', amountStr >= 1e12, amountStr >= 1e12)//亿
       + parseKilo((amountStr / 1e4) % 1e4, '万', amountStr >= 1e8)//万
       + parseKilo((amountStr) % 1e4, '', amountStr >= 1e4)//千
       + '圆'
       + (fpt.charAt(0) !== '0' ? caps[parseInt(fpt.charAt(0))] + '角' : '')
       + (fpt.charAt(1) !== '0' ? caps[parseInt(fpt.charAt(1))] + '分' : '')
       + (fpt.charAt(1) === '0' ? '整' : '')
   );
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值