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( 0 , 1 ))){ |
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 | } |