`
mazhaoeryuan
  • 浏览: 2604 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

人民币中文大写字符转成阿拉伯数字工具类

阅读更多



       最近开发的项目,处理数据过程中有一需求就是根据人民币中文大写转换成阿拉伯数字;于是马上百度查找前辈们贡献的资源,发现很少涉及,大部分都是阿拉伯数字转换成中文。于是只能自己敲代码,经过测试已满足项目需求,现将代码进行整理总结,方便以后查用。

import java.math.BigDecimal;

/**
 * 实现人民币大写转成阿拉伯数字工具
 * 
 * @author zey
 *
 */
public class RMBUtils {

	/**
	 * 中文中简写的汉字金额 经常使用
	 */
	public static final String[] RMB_NUMBERS = new String[] { "一", "二", "三",
			"四", "五", "六", "七", "八", "九", "两", "廿", "卅", "○" };
	/**
	 * 中文中繁写的汉字金额 经常使用
	 */
	public static final String[] BIG_RMB_NUMBERS = new String[] { "壹", "贰",
			"叁", "肆", "伍", "陆", "柒", "捌", "玖", "俩", "廿", "卅", "零" };// 大写的汉字
	/**
	 * 与汉字相应的转化的数字
	 */
	public static final Long[] TO_ARABIC_NUMBERS = new Long[] { 1L, 2L, 3L, 4L,
			5L, 6L, 7L, 8L, 9L, 2L, 2L, 3L, 0L };// 转化为阿拉伯数字

	/**
	 * 人民币单位关键词(即大写数字倍数) 简写 注意:一定要由大到小
	 */
	public static final String[] RMB_UNIT = new String[] { "亿", "万", "千", "百",
			"十", "元", "角", "分", "厘" };// 中文中间隔的倍数
	/**
	 * 人民币单位关键词 繁体写
	 */
	public static final String[] BIG_RMB_UNIT = new String[] { "億", "萬", "仟",
			"佰", "拾", "圆", "角", "分", "厘" };

	/**
	 * 与人民币单位关键词对应的基数
	 */
	public static final BigDecimal[] TO_CARDINAL_NUMBERS = new BigDecimal[] {
			new BigDecimal(100000000L), new BigDecimal(10000L),
			new BigDecimal(1000L), new BigDecimal(100L), BigDecimal.TEN,
			BigDecimal.ONE, new BigDecimal("0.1"), new BigDecimal("0.01"),
			new BigDecimal("0.001") };// 转化为阿拉伯的倍数

	/**
	 * 大写转化为小写的过程操作
	 * 
	 * @param money
	 *            大写金额
	 * @return
	 */
	public static String covertToDigital(String money) {
		BigDecimal number = getDigitalNum(money);
		return number.toString();
	}

	/**
	 * 辅助类,处理中文数字转换成阿拉伯数字,利用递归算法
	 * 
	 * @param money
	 *            人民币大写
	 * @return
	 */
	private static BigDecimal getDigitalNum(String money) {
		BigDecimal result = BigDecimal.ZERO;
		if ((money == null || money.trim().length() <= 0)) {
			return result;
		}
		// 匹配大写金额的单位
		for (int i = 0; i < RMB_UNIT.length; i++) {
			// 查找字符中的简、繁单位
			int index = money.lastIndexOf(RMB_UNIT[i]) == -1 ? money
					.lastIndexOf(BIG_RMB_UNIT[i]) : money
					.lastIndexOf(RMB_UNIT[i]);
			if (index >= 0) {
				String pre_money = money.substring(0, index); // 截取当前单位的
																// 前面的中文字符串
				money = money.substring(index + 1); // 截取当前单位后面的字符串 ,进行下一次迭代比较
				if ((pre_money == null || pre_money.length() <= 0)
						&& TO_CARDINAL_NUMBERS[i].intValue() == 10) { // 处理拾开头的特殊字符  例如 拾、 十
					result = result.add(TO_CARDINAL_NUMBERS[i]);
				} else { // 对当前单位截取的前面的字符 递归处理
					result = result.add(getDigitalNum(pre_money).multiply(
							TO_CARDINAL_NUMBERS[i]));
				}
			}
		}
		// 如果不带单位 直接阿拉伯数字匹配替换
		if (money != null && money.length() > 0) {
			result = result.add(getArabicNumByBig(money));
		}
		return result;
	}

	/**
	 * 辅助类,中文数字 转化为对应的阿拉伯数字
	 * 
	 * @param big
	 * @return
	 */
	private static BigDecimal getArabicNumByBig(String big) {
		BigDecimal result = BigDecimal.ZERO;
		for (int j = 0; j < RMB_NUMBERS.length; j++) {
			big = big.replaceAll(RMB_NUMBERS[j],
					TO_ARABIC_NUMBERS[j].toString()); // 中文小写替换
			big = big.replaceAll(BIG_RMB_NUMBERS[j],
					TO_ARABIC_NUMBERS[j].toString());// 中文大写替换
		}
		try {
			result = new BigDecimal(big);
		} catch (Exception e) {
			result = BigDecimal.ZERO;
		}
		return result;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("---------------------测试数据----------------");
		System.out.println(covertToDigital("壹万亿一千万零三十圆五角七分"));
		System.out.println(covertToDigital("一百万亿两分"));
		System.out.println(covertToDigital("壹萬億"));
		System.out.println(covertToDigital("贰萬億"));
		System.out.println(covertToDigital("叁萬億"));
		System.out.println(covertToDigital("肆萬億"));
		System.out.println(covertToDigital("伍萬億"));
		System.out.println(covertToDigital("陆萬億"));
		System.out.println(covertToDigital("柒萬億"));
		System.out.println(covertToDigital("捌萬億"));
		System.out.println(covertToDigital("玖萬億"));
		System.out.println(covertToDigital("拾萬億"));
		System.out.println(covertToDigital("十一元三角两分"));
		System.out.println(covertToDigital("十一元"));

	}

}

 

 

执行结果

 

 

 

  • 大小: 39.9 KB
分享到:
评论

相关推荐

    中文数字转成阿拉伯数字 java 实现

    这个场景下,我们有一个名为“中文数字转成阿拉伯数字 java 实现”的压缩包,包含了一个实现此功能的Java包和一个单元测试类。下面我们将深入探讨这个功能的实现及其相关知识点。 首先,我们要理解中文数字和阿拉伯...

    java实现数字转换人民币中文大写工具

    该工具使用 StringBuilder 对象来构建大写字符串,并使用数组 NUMBER 和 CBit 来存储中文数字和单位信息。在将数字转换为大写时,工具会根据数字的长度和小数点的位置来确定转换的方式,并使用循环来处理每个数字位...

    Android中数字转中文,金额转大写

    首先,数字转中文主要是将阿拉伯数字(如1、2、3等)转换成中文数字(如一、二、三等)。在Java或Kotlin中,我们可以创建一个Map,将数字与对应的中文字符映射起来,然后通过遍历数字字符串并查找对应的中文字符来...

    Qt实现人民币大写

    可以创建一个二维数组或者哈希表,存储数字与大写字符的对应关系。然后,通过字符串操作,如分割、遍历和替换,将数字字符串转换成大写形式。例如,对于每一位数字,根据其值查找对应的大写字母并拼接起来。 4. **...

    用C++编写数字转换成汉字大写的程序

    标题 "用C++编写数字转换成汉字大写的程序" 提示我们要探讨的是如何利用C++编程语言将阿拉伯数字转换为汉字大写,这种转换在银行、财务等对账单有明确要求的领域尤为常见。汉字大写数字通常用于增强财务记录的清晰度...

    阿拉伯数字金额转换为大写数字金额

    在中文中,阿拉伯数字1至9对应的汉字大写分别是壹、贰、叁、肆、伍、陆、柒、捌、玖。零对应的是零或〇。小数点后的部分,元、角、分分别代表整数部分、十分之一和百分之一。例如,123.45在大写中是壹佰贰拾叁元肆角...

    阿拉伯数字转换成英文和大写

    在IT领域,尤其是在财务软件和数据处理中,将阿拉伯数字转换为英文或大写格式是一项常见的需求。这有助于提高财务报告的清晰度和规范性,特别是在处理金额时,大写数字可以防止篡改,增强安全性。这个项目描述了一个...

    阿拉伯数字转换为中文小写数字

    在Android开发过程中,有时我们需要将阿拉伯数字(1, 2, 3...)转换成中文小写数字(一,二,三...),特别是在涉及到文化习惯或者用户界面本地化的时候,如书籍页码显示。这个任务涉及到字符串处理和字符映射,下面...

    将阿拉伯数字转换为金额的汉字大写

    接下来,我们可以编写一个方法,接收阿拉伯数字作为输入,按照规则将其转换成汉字大写: ```java public static String convertToChinese(String number) { // 对数字进行格式化,确保只有正整数或正小数 number ...

    人民币大写转换工具,方便不会书写大写人民的人使用

    这个工具的主要功能是将阿拉伯数字形式的人民币金额自动转换成规范的大写汉字形式,确保了填写的准确性,避免了因为书写错误导致的财务纠纷。 首先,我们来了解一下人民币大写的书写规则。在中国,为了防止篡改,...

    java数字转汉字工具类详解

    Java数字转汉字工具类是指将数字转换为汉语中人民币的大写的工具类。该工具类主要用于处理金额的转换,提供了一种将数字转换为汉语中人民币的大写的解决方案。 在Java数字转汉字工具类中,使用了两个数组:...

    人民币大写金额转换DLL库

    对于人民币大写金额转换的DLL库,可能包括如`ConvertToChineseAmount(int amount)`这样的函数,输入阿拉伯数字的金额,返回对应的汉字大写字符串。 6. **使用方法**:在开发过程中,程序员需要将该DLL库引入到项目...

    人民币金额小写转大写

    "人民币金额小写转大写"是一个常见的需求,它涉及到将阿拉伯数字(小写)转换成中文汉字(大写),以减少书写错误和欺诈的风险。在.NET框架下,C#语言提供了丰富的功能来处理这种转换。 首先,我们需要理解人民币...

    使用java将人民币金额转换成大写并使用自定义标签显示到页面

    3. 字符映射:为每个数字找到对应的中文大写字符。例如,0对应“零”,1对应“壹”,以此类推,9对应“玖”。 4. 特殊处理:对于特定的数字组合,如“10”应转换为“拾”,“100”为“佰”,需要特别处理,避免出现...

    阿拉伯数字转中文大字

    这类工具通常会接受阿拉伯数字作为输入,然后返回相应的中文大写金额字符串。使用这样的工具可以极大地提高财务人员的工作效率,减少手动转换带来的错误可能性。 在开发这样的功能时,需要注意处理边界情况,如零...

    C#如何将商品金额小写转换成大写(C# .net)

    在中文中,小写阿拉伯数字(0-9)与大写汉字数字的对应如下: 1. 0 对应 "零" 2. 1 对应 "壹" 3. 2 对应 "贰" 4. 3 对应 "叁" 5. 4 对应 "肆" 6. 5 对应 "伍" 7. 6 对应 "陆" 8. 7 对应 "柒" 9. 8 对应 "捌" 10. 9 ...

    金钱大写转小写数字类java(精确到角)

    首先,我们需要了解中文大写数字与阿拉伯数字的对应关系: 1. 零:零 2. 一:壹 3. 二:贰 4. 三:叁 5. 四:肆 6. 五:伍 7. 六:陆 8. 七:柒 9. 八:捌 10. 九:玖 11. 十:拾 12. 百:佰 13. 千:仟 14. 万:万 ...

    数字小写改大写工具

    例如,"壹"、"贰"、"叁"等汉字代替阿拉伯数字的"1"、"2"、"3",使得篡改数字变得更加困难。这个工具则自动化了这一过程,节省了手动转换的时间,减少了人为错误的可能性。 工具的核心功能可能包括以下几点: 1. **...

    人民币小写转大写(非常适合银行等财会部门使用)

    而大写金额则是用中文字符来表示,目的是防止篡改和提高准确性,例如“壹拾贰万叁仟肆佰伍拾陆元柒角捌分”。 人民币大写金额的转换规则如下: 1. "0" 对应 "零"; 2. "1" 对应 "壹"; 3. "2" 对应 "贰"; 4. "3" ...

Global site tag (gtag.js) - Google Analytics