java 中大写数字与阿拉伯数之间的相互转换

来源:互联网 发布:打开galgame的软件 编辑:程序博客网 时间:2024/05/03 08:59
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;  }}

1 0