讲金额(数字)转换成中文大写

001 package com.phyl.util;
002 import java.util.HashMap;
003 /**
004  * 数字金额转换成中文大写金额
005  * @author ftpeng
006  *
007  */
008 public class ChineseConvert {
009      
010     /**
011      * 人民币大写单位制
012      */
013     private static HashMap<Integer, String> dws;
014      
015     /**
016      * 数字对应的中文
017      */
018     private static String[] jes;
019      
020     // 初始化执行
021     static{
022         dws = new HashMap<Integer, String>();
023         dws.put(-2"分");
024         dws.put(-1"角");
025         dws.put(0"元");
026         dws.put(1"拾");
027         dws.put(2"佰");
028         dws.put(3"仟");
029         dws.put(4"万");//
030         dws.put(5"拾");
031         dws.put(6"佰");
032         dws.put(7"仟");
033         dws.put(8"亿");//
034         dws.put(9"拾");
035         dws.put(10"佰");
036         dws.put(11"仟");
037         dws.put(12"万");
038         jes = new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
039     }
040      
041     /**
042      * 数字转换人民币大写
043      * @param number 数字 不支持科学数字
044      * @return
045      */
046     public static String chinese(String number){
047         StringBuffer su = new StringBuffer();
048         // 整数部分
049         number = delInvalidZero(number);
050         String str = null;
051         // 小数部分
052         String decimal = null;
053         if(number.contains(".")){
054             // 截取整数位
055             str = number.split("\\.")[0];
056             decimal = number.split("\\.")[1];
057         }else{
058             str = number;
059         }
060         // 判断是否存在整数位
061         if(str.length()>0){
062             for (int i = 0; i < str.length() ; i++) {
063                 String context = str.substring(i, i+1);
064                 int pow = number.length()-4-i;
065                 Integer val = Integer.parseInt(context.toString());
066                 // 获取中文单位
067                 String sign = dws.get(pow);
068                 // 获取中文数字
069                 String name = jes[Integer.parseInt(context)];
070                 if(val==0){
071                     if(pow%4!=0){// 删除单位
072                         sign = "";
073                     }
074                     if(i < str.length()-1){
075                         Integer val1 = Integer.parseInt(str.substring(i+1, i+2));
076                         if(val==0&&val==val1){
077                             name = "";
078                         }
079                     }else if(i == str.length()-1){
080                         name = "";
081                     }
082                 }
083                 su.append(name+sign);
084             }
085         }
086         // 判断是否存在小数位
087         if(decimal!=null){
088             str = decimal.substring(0,1);
089             if(!"0".equals(str)){
090                 su.append(jes[Integer.parseInt(str)]+dws.get(-1));
091             }
092             str = decimal.substring(1,2);
093             if(!"0".equals(str)){
094                 su.append(jes[Integer.parseInt(str)]+dws.get(-2));
095             }
096         }else{
097             su.append("整");
098         }
099         return su.toString();
100     }
101      
102     /**
103      * 清理第一个字段等于0的无效字符
104      * @param str
105      * @return
106      */
107     private static String delInvalidZero(String str){
108         if("0".equals(str.substring(01))){
109             return delInvalidZero(str.substring(1, str.length()));
110         }else{
111             return str;
112         }
113     }
114      
115     public static void main(String[] args) {
116         System.out.println(ChineseConvert.chinese("000010001.15"));
117     }
118 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值