public class CNNumberFormat { private static final char []cnNumbers={'零', '壹', '贰', '叁', '肆', '伍','陆', '柒', '捌', '玖'}; private static final char []stdNumbers={'0','1','2','3','4','5','6','7','8','9'}; /** *货币单位 */ private static final char []units={ '厘', '分', '角', '元', '拾', '佰', '仟','万', '拾', '佰', '仟', '亿', '拾', '佰', '仟'}; /** * 是否输出货币的单位的圆角分的完整格式 */ private boolean fullFormat=true; public CNNumberFormat() { } private CNNumberFormat(boolean fullFormat) { this.fullFormat = fullFormat; } /** * 取得大写形式的装换 * @param d * @return */ public String format(double d){ NumberFormat nf=new DecimalFormat("#.###"); return this.transform(nf.format(d)); } public String format(long ln){ return this.transform(String.valueOf(ln)); } private String transform(String original){ String integerPart=""; String floatPart=""; if(original.indexOf(".")>-1){ int dotIndex=original.indexOf("."); integerPart=original.substring(0,dotIndex); floatPart=original.substring(dotIndex+1); }else{ integerPart=original; } StringBuffer sb=new StringBuffer(); //整数部分部处理 for(int i=0;i<integerPart.length();i++){ int number=Integer.parseInt(String.valueOf(integerPart.charAt(i))); sb.append(cnNumbers[number]); if(fullFormat){ sb.append(units[integerPart.length()+2-i]); } } //小数部分处理 if(floatPart.length()>=1){ for(int i=0;i<floatPart.length();i++){ int number=Integer.parseInt(String.valueOf(floatPart.charAt(i))); sb.append(cnNumbers[number]); if(fullFormat && i<=3){ sb.append(units[2-i]); } } } return sb.toString(); } /** * 将中文大写数字字符串转换成对应的数字类型 * @param cnNumber * @return */ public Number parse(String cnNumStr){ if(cnNumStr==null || "".equals(cnNumStr.trim())){ return null; } cnNumStr=cnNumStr.replaceAll("整",""); if(!cnNumStr.endsWith("元")){ cnNumStr=cnNumStr.replaceAll("元","."); } for(int k=0;k<cnNumStr.length();k++){ for(int i=0;i<cnNumbers.length;i++){ cnNumStr = cnNumStr.replace(cnNumbers[i],stdNumbers[i]); } } for(int j=0;j<units.length;j++){ cnNumStr=cnNumStr.replace(units[j]+"",""); } BigDecimal b=new BigDecimal(cnNumStr); return b; } }