public class Number2Cn { private static String[] CAPTAL = new String[] {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; private static String a1 = "零壹贰叁肆伍陆柒捌玖",a2="个拾佰仟",a3="个万亿兆京"; private static String temp = "负"; private static String yuan = "元"; private static String jiao = "角"; private static String fen = "分"; private static String zero = "零"; private static long tenpow(int in){ if(in<0)throw new RuntimeException("输入必须>0"); long s=1; for(int i=0;i<in;i++) s*=10; return s; } private static String conv(BigDecimal in){ //if(in<0)throw new RuntimeException("输入必须>0"); long num=in.longValue(); BigDecimal remain=in.subtract(new BigDecimal(num)); String output = conv(num); //小数部分转换 long jiaoNum = remain.movePointRight(1).longValue(); String jiaoString = conv(jiaoNum); long fenNum = remain.movePointRight(2).longValue()-jiaoNum*10; String fenString = conv(fenNum); output = output + yuan + jiaoString + jiao + fenString + fen; return output; } public static String conv(long in){ if(in==0) return zero; long num=(long)in; long tnum=num; //double remain=in-num; int len=(new Long(num)).toString().length(); int i4=len/4; //取得数长 if(i4>a3.length()-1)throw new RuntimeException("输入值太大,无法表示"); String output=""; for(int i=i4;i>=0;i--){ long tt=tnum/tenpow(i*4);//取其中四个数 long tf=tt; tnum%=tenpow(i*4); for(int j=3;j>=0;j--){ long ttt=tt/tenpow(j); tt%=tenpow(j); output+=a1.charAt((int)ttt); if(ttt==0)continue; output+=a2.charAt(j); } if(tf>0)output+=a3.charAt(i); //末尾标上“万亿兆”等 } output=output.replaceAll("个",""); output=output.replaceAll("^零+",""); output=output.replaceAll("零+$",""); output=output.replaceAll("零+","零"); output=output.replaceAll("零万","万"); output=output.replaceAll("零亿","亿"); output=output.replaceAll("零兆","兆"); return output; } public static String getTranResult(BigDecimal number){ if(number==null) return null; if(number.compareTo(new BigDecimal(0))>=0) return conv(number); else return (temp + conv(number.negate())); } /* public static void main(String[]arg){ BigDecimal num = new BigDecimal("404000"); }*/ public static String getCaptal(String number, int scale){ int tmp = Integer.parseInt(number); int current = (int)((tmp%(scale*10))/scale); return CAPTAL[current]; } }