现在的位置: 首页 > 综合 > 正文

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

2018年02月11日 ⁄ 综合 ⁄ 共 1847字 ⁄ 字号 评论关闭
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; 
 }
}

抱歉!评论已关闭.