本文主要是介绍汉字人民币转阿拉伯数字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
先看结果:
废话不多说 直接上代码:
package com.ht.commons;import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;public class ChineseRMBConverter {private static final Map<Character, BigDecimal> numMap = new HashMap<>();private static final Map<Character, BigDecimal> unitMap = new HashMap<>();static {numMap.put('零', new BigDecimal("0"));numMap.put('壹', new BigDecimal("1"));numMap.put('贰', new BigDecimal("2"));numMap.put('叁', new BigDecimal("3"));numMap.put('肆', new BigDecimal("4"));numMap.put('伍', new BigDecimal("5"));numMap.put('陆', new BigDecimal("6"));numMap.put('柒', new BigDecimal("7"));numMap.put('捌', new BigDecimal("8"));numMap.put('玖', new BigDecimal("9"));// 定义基本单位unitMap.put('拾', new BigDecimal("10"));unitMap.put('佰', new BigDecimal("100"));unitMap.put('仟', new BigDecimal("1000"));// 定义高级单位unitMap.put('万', new BigDecimal("10000"));unitMap.put('亿', new BigDecimal("100000000"));}public static BigDecimal chineseCurrencyToNumber(String currency) {BigDecimal total = BigDecimal.ZERO;BigDecimal tempNum = BigDecimal.ZERO; // 存储当前临时的数字BigDecimal section = BigDecimal.ZERO; // 当前小节的累加值,比如万以下,亿以下等BigDecimal lastUnit = BigDecimal.ONE; // 上一个单位的值,默认为1for (int i = 0; i < currency.length(); i++) {char ch = currency.charAt(i);// 判断当前字符是否为数字if (numMap.containsKey(ch)) {tempNum = numMap.get(ch);} else if (unitMap.containsKey(ch)) {BigDecimal unit = unitMap.get(ch);if (unit.compareTo(new BigDecimal("10000")) < 0) {section = section.add(tempNum.multiply(unit));} else {section = (section.add(tempNum)).multiply(unit);total = total.add(section);section = BigDecimal.ZERO; // 重置小节值}tempNum = BigDecimal.ZERO; // 重置临时数字lastUnit = unit; // 更新最后的单位}}// 确保最后没有单位的数字也被加上total = total.add(section.add(tempNum));return total;}public static void main(String[] args) {String cnNum1 = "壹拾捌万元整";String cnNum2 = "壹亿零壹拾捌万元整";String cnNum3 = "伍亿伍仟零肆万伍仟元整";BigDecimal result1 = chineseCurrencyToNumber(cnNum1);BigDecimal result2 = chineseCurrencyToNumber(cnNum2);BigDecimal result3 = chineseCurrencyToNumber(cnNum3);System.out.println(result1);System.out.println(result2);System.out.println(result3);}
}
这篇关于汉字人民币转阿拉伯数字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!