1. 程式人生 > >java 中大寫數字與阿拉伯數之間的相互轉換

java 中大寫數字與阿拉伯數之間的相互轉換

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; 
 }
}