话不多说直接上代码:import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Convert_Number_Chinese { public static final String[] Str_Number={"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; public static final String[] Str_Location={ "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟" }; public static String getSign(String tempString) {//拿到符号 return tempString.indexOf("-")!=-1?"负":""; } public static String getInteger(String tempStr) {//拿到整数部分 String Str_Integer="";//去掉两端空格 tempStr=tempStr.trim(); if(tempStr.matches("^0+[.].+")) { tempStr=tempStr.replaceFirst("^0+", "0");//e.g: 000.123改为0.123 return "零"; } if(tempStr.matches("^0+")) { return "零";//e.g: 00000 } tempStr=tempStr.replaceFirst("^0+","");//e.g: 000233.3改为233.3 if(tempStr.indexOf(".")!=-1) { Str_Integer=tempStr.substring(0,tempStr.indexOf(".")); }else { Str_Integer=tempStr; } Str_Integer=new StringBuffer(Str_Integer).reverse().toString(); StringBuffer Str_Result=new StringBuffer(); for(int i=0;i<Str_Integer.length();i++) { Str_Result.append(Str_Location[i]); int index=Integer.parseInt(i==Str_Integer.length()-1?Str_Integer.substring(i):Str_Integer.substring(i,i+1)); Str_Result.append(Str_Number[index]); } Str_Result=Str_Result.reverse(); replace(Str_Result,"零仟零佰零拾零万",""); replace(Str_Result,"零拾","零"); replace(Str_Result,"零佰","零"); replace(Str_Result,"零仟","零"); replace(Str_Result,"零万","万"); replace(Str_Result,"零亿","亿"); replace(Str_Result,"零零","零"); //删除个位上的零 if(Str_Result.charAt(Str_Result.length()-1)=='零'&&Str_Result.length()!=1) { Str_Result.deleteCharAt(Str_Result.length()-1); } if(Str_Result.toString().startsWith("壹拾")) { replace(Str_Result,"壹拾","拾");//e.g: 14.23 } return Str_Result.toString(); } public static void replace(StringBuffer Str_Result,String Resource,String Replace_String) {//替换方法 if(Str_Result==null||Resource==null||Replace_String==null) { return; } while(Str_Result.indexOf(Resource)!=-1) { Str_Result=Str_Result.replace(Str_Result.indexOf(Resource),Str_Result.indexOf(Resource)+Resource.length(), Replace_String); } } public static String getDecimal(String tempString) {//拿到小数部分 String Str_Decimal=""; if(tempString.indexOf(".")==-1||tempString.matches(".+[.]0+$")) {//e.g: 000123 000123.000 return ""; } Pattern p=Pattern.compile("(.+[.][1-9]+)(0+)$"); Matcher m=p.matcher(tempString); if(m.matches()) { tempString=new StringBuffer(tempString).delete(m.group(1).length(),m.group(1).length()+m.group(2).length()).toString(); }//e.g: 000123.45000 tempString=tempString.replace("0+$",""); Str_Decimal=tempString.substring(tempString.indexOf(".")+1); StringBuffer Str_Result_Dot=new StringBuffer(Str_Decimal.length()); for(int i=0;i<Str_Decimal.length();i++) { int index=Integer.parseInt(i==Str_Decimal.length()-1?Str_Decimal.substring(i):Str_Decimal.substring(i,i+1)); Str_Result_Dot.append(Str_Number[index]); } return "点"+Str_Result_Dot.toString(); } public static String Number_Chinese(double tempNumber) {//转换double类型的数 DecimalFormat df=new DecimalFormat("#.#########"); String Str_Temp=String.valueOf(df.format(tempNumber)); StringBuffer Str_End=new StringBuffer(getSign(Str_Temp)+getInteger(Str_Temp)+getDecimal(Str_Temp)); return Str_End.toString(); } public static String Number_Chinese(BigDecimal tempNumber) {//转换BigDecimal类型的数 return Number_Chinese(tempNumber.doubleValue()); } public static String Number_Chinese(String tempNumber) {//转换String类型的数 return new StringBuffer(getSign(tempNumber)+getInteger(tempNumber)+getDecimal(tempNumber)).toString(); } public static void main(String[] args) { System.out.println(Number_Chinese(0001230400567.893400)); System.out.println(Number_Chinese(300000000)); System.out.println(Number_Chinese("00300000000")); System.out.println(Number_Chinese("0021000230100.003")); } } 测试结果: 拾贰亿叁仟零肆拾万零伍佰陆拾柒点捌玖叁肆 叁亿 叁亿 贰佰壹拾亿零贰拾叁万零壹佰点零零叁