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

来源:互联网 发布:期刊在线阅读系统源码 编辑:程序博客网 时间:2024/04/28 20:01
001package com.phyl.util;
002import java.util.HashMap;
003/**
004 * 数字金额转换成中文大写金额
005 * @author ftpeng
006 *
007 */
008public 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}
举报
原创粉丝点击