人民币小写转换为大写

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


  1. package com.zzb.test0;  
  2.   
  3. import junit.framework.Assert;  
  4.   
  5. import org.junit.Test;  
  6.   
  7. /** 
  8.  * 测试人民币小写转大写 
  9.  * @author zhengzhb 
  10.  */  
  11. public class UpperMoney {  
  12.     public String upper(String money) throws Exception{  
  13.         if(!money.matches("^[1-9]+[0-9]*$|^[1-9]+[0-9]*.[0-9]+$" )){  
  14.             throw new Exception("钱数格式错误!");  
  15.         }  
  16.         String[] part= money.split("\\.");  
  17.         StringBuffer integer = new StringBuffer();  
  18.         for(int i=0;i<part[0].length();i++){  
  19.             char perchar = part[0].charAt(i);  
  20.             integer.append(this.upperNumber(perchar));  
  21.             integer.append(this.upperNumber(part[0].length()-i-1));  
  22.         }  
  23.           
  24.         StringBuffer decimal = new StringBuffer();  
  25.         if(part.length>1 && !"00".equals(part[1])){  
  26.             int length = part[1].length()>=2?2:part[1].length();  
  27.             for(int i=0;i<length;i++){  
  28.                 char perchar = part[1].charAt(i);  
  29.                 decimal.append(this.upperNumber(perchar));  
  30.                 if(i==0)decimal.append('角');  
  31.                 if(i==1)decimal.append('分');  
  32.             }  
  33.         }  
  34.         String result = integer.toString()+decimal.toString();  
  35.         return this.dispose(result);  
  36.     }  
  37.   
  38.     private char upperNumber(char number){  
  39.         switch(number){  
  40.             case '0'return '零';  
  41.             case '1'return '壹';  
  42.             case '2'return '贰';  
  43.             case '3'return '叁';  
  44.             case '4'return '肆';  
  45.             case '5'return '伍';  
  46.             case '6'return '陆';  
  47.             case '7'return '柒';  
  48.             case '8'return '捌';  
  49.             case '9'return '玖';  
  50.         }  
  51.         return 0;  
  52.     }  
  53.       
  54.     private char upperNumber(int index){  
  55.   
  56.         switch(index){  
  57.             case 0return '圆';  
  58.             case 1return '拾';  
  59.             case 2return '佰';  
  60.             case 3return '仟';  
  61.             case 4return '万';  
  62.             case 5return '拾';  
  63.             case 6return '佰';  
  64.             case 7return '仟';  
  65.             case 8return '亿';  
  66.             case 9return '拾';  
  67.             case 10return '佰';  
  68.             case 11return '仟';  
  69.         }  
  70.         return 0;  
  71.     }  
  72.   
  73.     private String dispose(String result){  
  74.         result = result.replaceAll("零仟零佰零拾|零仟零佰|零佰零拾|零仟|零佰|零拾""零")  
  75.             .replaceAll("零+""零").replace("零亿""亿");  
  76.         result = result.matches("^.*亿零万[^零]仟.*$" )?result.replace("零万""零")  
  77.             :result.replace("零万""万");  
  78.         result = result.replace("亿万""亿").replace("零圆""圆").replace("零分""")  
  79.             .replaceAll("圆零角零分|圆零角$|圆$" , "圆整");  
  80.         return result;  
  81.     }  
  82.   
  83.     @Test  
  84.     public void test(){  
  85.         try {  
  86.             Assert.assertEquals(upper("1"), "壹圆整");  
  87.             Assert.assertEquals(upper("10"), "壹拾圆整");  
  88.             Assert.assertEquals(upper("20.7"), "贰拾圆柒角");  
  89.             Assert.assertEquals(upper("10.70"), "壹拾圆柒角");  
  90.             Assert.assertEquals(upper("18.5"), "壹拾捌圆伍角");  
  91.             Assert.assertEquals(upper("200.5"), "贰佰圆伍角");  
  92.             Assert.assertEquals(upper("2000"), "贰仟圆整");  
  93.             Assert.assertEquals(upper("50000"), "伍万圆整");  
  94.             Assert.assertEquals(upper("500000"), "伍拾万圆整");  
  95.             Assert.assertEquals(upper("5000000"), "伍佰万圆整");  
  96.             Assert.assertEquals(upper("50000000"), "伍仟万圆整");  
  97.             Assert.assertEquals(upper("500000000"), "伍亿圆整");  
  98.             Assert.assertEquals(upper("5000000000"), "伍拾亿圆整");  
  99.   
  100.             Assert.assertEquals(upper("5000000001"), "伍拾亿零壹圆整");  
  101.             Assert.assertEquals(upper("5000000021"), "伍拾亿零贰拾壹圆整");  
  102.             Assert.assertEquals(upper("5000000421"), "伍拾亿零肆佰贰拾壹圆整");  
  103.             Assert.assertEquals(upper("5000005421"), "伍拾亿零伍仟肆佰贰拾壹圆整");  
  104.             Assert.assertEquals(upper("5000035421"), "伍拾亿零叁万伍仟肆佰贰拾壹圆整");  
  105.             Assert.assertEquals(upper("5000635421"), "伍拾亿零陆拾叁万伍仟肆佰贰拾壹圆整");  
  106.             Assert.assertEquals(upper("5004635421"), "伍拾亿零肆佰陆拾叁万伍仟肆佰贰拾壹圆整");  
  107.             Assert.assertEquals(upper("5024635421"), "伍拾亿贰仟肆佰陆拾叁万伍仟肆佰贰拾壹圆整");  
  108.             Assert.assertEquals(upper("5224635421"), "伍拾贰亿贰仟肆佰陆拾叁万伍仟肆佰贰拾壹圆整");  
  109.   
  110.             Assert.assertEquals(upper("15224635421"), "壹佰伍拾贰亿贰仟肆佰陆拾叁万伍仟肆佰贰拾壹圆整");  
  111.             Assert.assertEquals(upper("215224635421"), "贰仟壹佰伍拾贰亿贰仟肆佰陆拾叁万伍仟肆佰贰拾壹圆整");  
  112.   
  113.             Assert.assertEquals(upper("500021"), "伍拾万零贰拾壹圆整");  
  114.             Assert.assertEquals(upper("5000821"), "伍佰万零捌佰贰拾壹圆整");  
  115.             Assert.assertEquals(upper("5050006501"), "伍拾亿伍仟万陆仟伍佰零壹圆整");  
  116.             Assert.assertEquals(upper("550300001"), "伍亿伍仟零叁拾万零壹圆整");  
  117.               
  118.         } catch (Exception e) {  
  119.             e.printStackTrace();  
  120.         }  
  121.     }  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值