人民币小写转换为大写

标签: 人民币 小写 大写 | 发表时间:2012-01-03 18:27 | 作者:zhengzhb
出处:http://blog.csdn.net

 本程序的作用是将人民币的小写形式转换为大写,例如:调用upper("18.5"),将会返回字符串“壹拾捌圆伍角”。

package com.zzb.test0;

import junit.framework.Assert;

import org.junit.Test;

/**
 * 测试人民币小写转大写
 * @author zhengzhb
 */
public class UpperMoney {
	public String upper(String money) throws Exception{
		if(!money.matches("^[1-9]+[0-9]*$|^[1-9]+[0-9]*.[0-9]+{1}quot;)){
			throw new Exception("钱数格式错误!");
		}
		String[] part= money.split("\\.");
		StringBuffer integer = new StringBuffer();
		for(int i=0;i<part[0].length();i++){
			char perchar = part[0].charAt(i);
			integer.append(this.upperNumber(perchar));
			integer.append(this.upperNumber(part[0].length()-i-1));
		}
		
		StringBuffer decimal = new StringBuffer();
		if(part.length>1 && !"00".equals(part[1])){
			int length = part[1].length()>=2?2:part[1].length();
			for(int i=0;i<length;i++){
				char perchar = part[1].charAt(i);
				decimal.append(this.upperNumber(perchar));
				if(i==0)decimal.append('角');
				if(i==1)decimal.append('分');
			}
		}
		String result = integer.toString()+decimal.toString();
		return this.dispose(result);
	}

	private char upperNumber(char number){
		switch(number){
			case '0': return '零';
			case '1': return '壹';
			case '2': return '贰';
			case '3': return '叁';
			case '4': return '肆';
			case '5': return '伍';
			case '6': return '陆';
			case '7': return '柒';
			case '8': return '捌';
			case '9': return '玖';
		}
		return 0;
	}
	
	private char upperNumber(int index){

		switch(index){
			case 0: return '圆';
			case 1: return '拾';
			case 2: return '佰';
			case 3: return '仟';
			case 4: return '万';
			case 5: return '拾';
			case 6: return '佰';
			case 7: return '仟';
			case 8: return '亿';
			case 9: return '拾';
			case 10: return '佰';
			case 11: return '仟';
		}
		return 0;
	}

	private String dispose(String result){
		result = result.replaceAll("零仟零佰零拾|零仟零佰|零佰零拾|零仟|零佰|零拾", "零")
			.replaceAll("零+", "零").replace("零亿", "亿");
		result = result.matches("^.*亿零万[^零]仟.*$" )?result.replace("零万", "零")
			:result.replace("零万", "万");
		result = result.replace("亿万", "亿").replace("零圆", "圆").replace("零分", "")
			.replaceAll("圆零角零分|圆零角$|圆$" , "圆整");
		return result;
	}

	@Test
	public void test(){
		try {
			Assert.assertEquals(upper("1"), "壹圆整");
			Assert.assertEquals(upper("10"), "壹拾圆整");
			Assert.assertEquals(upper("20.7"), "贰拾圆柒角");
			Assert.assertEquals(upper("10.70"), "壹拾圆柒角");
			Assert.assertEquals(upper("18.5"), "壹拾捌圆伍角");
			Assert.assertEquals(upper("200.5"), "贰佰圆伍角");
			Assert.assertEquals(upper("2000"), "贰仟圆整");
			Assert.assertEquals(upper("50000"), "伍万圆整");
			Assert.assertEquals(upper("500000"), "伍拾万圆整");
			Assert.assertEquals(upper("5000000"), "伍佰万圆整");
			Assert.assertEquals(upper("50000000"), "伍仟万圆整");
			Assert.assertEquals(upper("500000000"), "伍亿圆整");
			Assert.assertEquals(upper("5000000000"), "伍拾亿圆整");

			Assert.assertEquals(upper("5000000001"), "伍拾亿零壹圆整");
			Assert.assertEquals(upper("5000000021"), "伍拾亿零贰拾壹圆整");
			Assert.assertEquals(upper("5000000421"), "伍拾亿零肆佰贰拾壹圆整");
			Assert.assertEquals(upper("5000005421"), "伍拾亿零伍仟肆佰贰拾壹圆整");
			Assert.assertEquals(upper("5000035421"), "伍拾亿零叁万伍仟肆佰贰拾壹圆整");
			Assert.assertEquals(upper("5000635421"), "伍拾亿零陆拾叁万伍仟肆佰贰拾壹圆整");
			Assert.assertEquals(upper("5004635421"), "伍拾亿零肆佰陆拾叁万伍仟肆佰贰拾壹圆整");
			Assert.assertEquals(upper("5024635421"), "伍拾亿贰仟肆佰陆拾叁万伍仟肆佰贰拾壹圆整");
			Assert.assertEquals(upper("5224635421"), "伍拾贰亿贰仟肆佰陆拾叁万伍仟肆佰贰拾壹圆整");

			Assert.assertEquals(upper("15224635421"), "壹佰伍拾贰亿贰仟肆佰陆拾叁万伍仟肆佰贰拾壹圆整");
			Assert.assertEquals(upper("215224635421"), "贰仟壹佰伍拾贰亿贰仟肆佰陆拾叁万伍仟肆佰贰拾壹圆整");

			Assert.assertEquals(upper("500021"), "伍拾万零贰拾壹圆整");
			Assert.assertEquals(upper("5000821"), "伍佰万零捌佰贰拾壹圆整");
			Assert.assertEquals(upper("5050006501"), "伍拾亿伍仟万陆仟伍佰零壹圆整");
			Assert.assertEquals(upper("550300001"), "伍亿伍仟零叁拾万零壹圆整");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


 

作者:zhengzhb 发表于2012-1-3 18:27:39 原文链接
阅读:7 评论:0 查看评论

相关 [人民币 小写 大写] 推荐:

人民币小写转换为大写

- - CSDN博客推荐文章
 本程序的作用是将人民币的小写形式转换为大写,例如:调用upper("18.5"),将会返回字符串“壹拾捌圆伍角”. package com.zzb.test0; import junit.framework.Assert; import org.junit.Test; /** * 测试人民币小写转大写 * @author zhengzhb */ public class UpperMoney {.

人民币的两种含金量

- whitewolf - 三级宪政
  同样面值的人民币,其实含金量从来是不同的,这点可能很多人并没有意识到. 而这种含金量不同也有两种表现形式,咱们先说说第一种.   湖南人民广播电台新闻频道潇湘之声《为民热线》栏目接到了一些同学投诉,说自己专升本的时候,被迫交了1万块钱的捐资助学费,当记者采访湖南省教育厅新闻中心主任李让恒的时候,得到了这么几句回答:“这个事很重要吗.

人民币香港出海<br>中央明确授权香港为唯一的“人民币离岸中心”

- 峰 - 南方周末-热点新闻
已在内地形成“堰塞湖”的人民币从香港开闸放水,不仅有缓解高通胀之意,更意味着通过香港市场,有限度地打通了各路资本与内地实体经济之间的通道.

2.99美元的游戏3元人民币可购买

- samcui - cnBeta.COM
原价2.99美元的热门游戏“植物大战僵尸”,竟然只需3元人民币. 日前一些市民向记者反映,网上出售一种可供苹果数码产品消费的“兑换码”,人民币兑换 美元只需1:1,他们怀疑其中可能有猫腻. 记者发现,所谓的“兑换码”很可能是不法分子恶意申领信用卡或盗取与信用卡绑定的账户信息进行“消费”,消费者 若购买此类账号不仅可能面临法律风险,更不利于行业发展,最终损害自己的利益.

人民币“对内贬值、对外升值”困局另解

- 奥斯汀Outman - 香港《凤凰周刊》官方博客
  由于周刊版页限制,本文在6月5日出版的第16期中被删节,以下是文章全文.   文/岳健勇 《凤凰周刊》2011年第16期(总第401期) 2001年6月5日......>>点击查看新浪博客原文.

人民币里的那点事,你知道吗??

- fei - 天朝娱乐 | 每天开心一下!
为什么人民币上面的人们越来来越少了.

美国人应学会喜欢人民币

- 品味视界 - FT中文网_英国《金融时报》(Financial Times)
直到不久以前,美国、欧洲或日本不会有多少工人花时间考虑,为什么他们挣的工资是中国工人的10倍、20倍甚至30倍. 是什么使得一个在美国工厂堆放箱子的工人,挣得数倍于越南或墨西哥工人的工资. 有人可能一厢情愿地想象,他们工作得更卖力,或者换句话说,墨西哥或中国工人懒惰或者缺乏技能. 也有人更为接近真实情况,把他们的高工资和高生产率归功于国家的制度优势:司法和教育系统、基础设施以及技....

人民币升值给中国人的影响

- - 中国报道周刊
  人民币升值的事情,这是几乎所有中國人都知道. 尽管如此,但是很多人并不知道人民币升值是否带来好处. 有不少人都在疑问,人民币升值到底是好事还是坏事. 人民币升值,就意味着人民币比以前值钱了.   如果以前8元人民币兑现1美元,现在只需要约7元人民币就可以兑现1美元,这就说明人民币对美元升值了,否则就是贬值了.

智器推出 Ten2 Plus 新平板,售价 998 元人民币

- - Engadget 中国版
智器在前期 TEN 平板的基础上推出了 Ten2 Plus 新平板,型号名为 T13. 规格上,秉承了上一代 9.7 吋分辨率为 1,024×768 IPS 电容显示屏,采用 ARM Crotex A9 架构的 AML8726-M3 处理器,1GHz 主频,512MB 的内存,内置了 8GB 的存储容量.

人民币跌停或将预示全球信贷枯竭

- - 职业日志 - 价值中国网
近期,即期市场人民币兑美元汇率连续触及跌停,引发了金融市场的极度恐慌. 应该讲,人民币急速下跌的原因众多,既有美元短期需求的冲击,也有人民币汇率的套利因素;既有跨境资本回撤,也有内部经济增速的预期改变;既有被动的阻击,也有主动的调整. 然而,人们似乎还没有完全认识到,人民币连续跌停,很可能预示着,在欧债危机愈演愈烈之下,欧洲的信贷紧缩正在向全球蔓延,三年前全球信贷资源渐近枯竭的情形很可能将卷土重来.