阿拉伯数字转人民币大写

从一分到千万亿,下面是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' ? '整' : '')
   );
}
好的,以下是 Java 代码,可以将人民币大写换为阿拉伯数字: ```java import java.util.HashMap; import java.util.Map; public class RMBConverter { private static final Map<String, Integer> RMB_NUM_MAP = new HashMap<>(); static { RMB_NUM_MAP.put("零", 0); RMB_NUM_MAP.put("壹", 1); RMB_NUM_MAP.put("贰", 2); RMB_NUM_MAP.put("叁", 3); RMB_NUM_MAP.put("肆", 4); RMB_NUM_MAP.put("伍", 5); RMB_NUM_MAP.put("陆", 6); RMB_NUM_MAP.put("柒", 7); RMB_NUM_MAP.put("捌", 8); RMB_NUM_MAP.put("玖", 9); } private static final Map<String, Integer> RMB_UNIT_MAP = new HashMap<>(); static { RMB_UNIT_MAP.put("元", 1); RMB_UNIT_MAP.put("拾", 10); RMB_UNIT_MAP.put("佰", 100); RMB_UNIT_MAP.put("仟", 1000); RMB_UNIT_MAP.put("万", 10000); RMB_UNIT_MAP.put("亿", 100000000); } public static double convert(String rmb) { double result = 0; String[] units = rmb.split("元"); String[] digits = units[0].split(""); int prevUnit = 0; int currUnit = 0; for (int i = digits.length - 1; i >= 0; i--) { int digit = RMB_NUM_MAP.get(digits[i]); currUnit = RMB_UNIT_MAP.get(units[0].charAt(i) + ""); if (currUnit < prevUnit) { result += digit * currUnit; } else { result += digit * currUnit; prevUnit = currUnit; } } if (units.length > 1) { String decimals = units[1].substring(0, units[1].length() - 1); result += Double.valueOf(decimals) / 100; } return result; } public static void main(String[] args) { String rmb = "壹仟陆佰捌拾元零捌分"; double result = convert(rmb); System.out.println(rmb + " = " + result); } } ``` 你可以将人民币大写字符串传递给 `convert` 方法,它将返回相应的阿拉伯数字。在上面的示例中,我将字符串 "壹仟陆佰捌拾元零捌分" 传递给 `convert` 方法,并将其打印为 "16680.08"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值