1. 程式人生 > >將浮點數轉換成人民幣讀法字串(JAVA)

將浮點數轉換成人民幣讀法字串(JAVA)

public class NumRmb{
	
	private String[] hanArr = {"零" , "壹" , "貳" , "叄" , "肆" , "伍" , "陸" , "柒", "捌" , "玖"};
	private String[] unitArr = {"分" , "角" , "元" , "十" , "百", "千"};
	
	private String divide(double num){
		long zheng = (long)num;
		long xiao = Math.round((num - zheng)*100);
		return zheng + "" + xiao;
	}
	
	/**
	 * 把一個七位的數字字串變成漢字字串
	 * @param numStr 需要被轉換的七位數字字串
	 * @return 七位的數字字串被轉換成漢字字串
	 */
	
	 private String toHanStr(String numStr){
		 String result = "";
		 //得到數字字串的整數值
		 int numZheng = Integer.parseInt(numStr);
		 //如果整數是零則直接返回零
		 if(numZheng == 0)
			 return "零";
		 int numLen = numStr.length();
		 //依次遍歷數字字串的每一個數字
		 for(int i = 0 ; i < numLen ; i++){
			 //把char型數字轉換成int型數字,因為它們的ASCII碼值正好相差48
			 //因此把char型數字減去48得到int型數字
			 int num = numStr.charAt(i) - 48;
			 //如果零,則需要新增單位(千,百,十)
			 if(num != 0){
				 result += hanArr[num] + unitArr[numLen - i -1];
			 } 
			 //如果是零,則需要判斷這個是不是高位的零例如0068,或者是不是低位的零如6800。
			 //如果是高位的零或者低位的零,則不用處理
			 //如果不是高位或低位的零,則應該判斷是否連續出現了多個零
			 //如果出現連續的多個零則只加上一個漢字零即可
			 else if(num == 0){
				 int temp1 = numZheng;
				 int temp2 = numZheng;
				 for(int j=i;j < numLen-1;j++){
					 temp1 = temp1/10;
					 temp2 = temp2%10;
				 }
				 //temp1為0表示是高位的零,temp2為零或numZheng表示是低位的零(最後一位是零比較特殊)
				 //如果最後一位為零則temp2為numZheng
				 if(temp1 == 0 || temp2 == 0 || temp2 == numZheng){}
				 else{
					 int temp3 = numStr.charAt(i-1) - 48;
					 //System.out.println(temp3);
					 if(temp3 == 0){}
					 else{
						 result += hanArr[num];
					 }
				 }
			
			 }
		 }
		 return result;
	 }
	 
	 public static void main(String[] args){
		 NumRmb nr = new NumRmb();
		 System.out.println(nr.toHanStr(nr.divide(1006.333)));
	 }
	 
}
小白學習過程2.0