1. 程式人生 > >將浮點數轉換成人命幣讀法字串 java版

將浮點數轉換成人命幣讀法字串 java版

題目:編寫一個程式,將浮點數轉換成人命幣讀法字串,例如,將1006.333轉換成壹仟零陸元叄角叄分

下面是我的解決方案,雖然沒有大神的那麼優秀,但是功能上還是差不多的。測試資料是從別人程式碼那裡賦值過來的。可能 註釋 中存在錯誤。

package test;

public class ChineseNumber {
		//定義靜態變數數字1-9
		static String [] data= {"零","壹","貳","叄","肆","伍","陸","柒","捌","玖"};
		//定義靜態變數單位 
		static String [] util= {"元","拾","佰","仟","萬","拾","佰","仟","億","拾","佰","仟"};
		static String [] fraction= {"角","分"};
		
	public ChineseNumber() {
		}	
	//轉化的方法
		public static String Huan(double h) {
			StringBuffer sb=new StringBuffer("");
			StringBuffer sb1=new StringBuffer("");
			String xiaoshu="";	
			String zhengshu="";
			//整數部分
			int zhengshu1=(int)h;
			int util1=0;
		if(zhengshu1==0)
				zhengshu=data[0]+util[0];
		else {    	while (zhengshu1!= 0) {                               //讀取整數部分,從個的單位開始讀
				int number = zhengshu1 % 10; 						
				zhengshu1 /= 10; 									//向前進位
				
				sb1.insert(0, util[util1]);
				
				util1++;
					if(number==0)						
					
						continue;
					sb1.insert(0, data[number]);
			
				
				}zhengshu=sb1.toString();
																		
				for(int h1=0;h1<=3;h1++){								//將多到的單位,進行刪減和優化
				zhengshu=zhengshu.replaceAll("仟佰", "仟");
				zhengshu=zhengshu.replaceAll("仟拾", "仟");
				zhengshu=zhengshu.replaceAll("佰拾", "佰");
				zhengshu=zhengshu.replaceAll("億仟", "億");
				zhengshu=zhengshu.replaceAll("億萬", "億");
				zhengshu=zhengshu.replaceAll("萬仟", "萬");
				zhengshu=zhengshu.replaceAll("萬佰", "萬");
		}
				}
			sb.append(zhengshu);
			//小數部分
			for(int n=0;n<2;n++) {
				xiaoshu+=data[(int)((h*(Math.pow(10, n+1)))%10)]+fraction[n];
			}
			xiaoshu=xiaoshu.replaceAll("零角零分", "整");
			xiaoshu=xiaoshu.replaceAll("零分", "");
			sb.append(xiaoshu);
			String str1="";
			str1=sb.toString();
		    return str1;
		    
		}
		
		
		public static void main(String [] args){
			
	        System.out.println(Huan(0)); // 零元整  
	        System.out.println(Huan(123)); // 壹佰貳拾叄元整  
	        System.out.println(Huan(1000000)); // 壹佰萬元整  
	        System.out.println(Huan(100000001)); // 壹億零壹元整  
	        System.out.println(Huan(1000000000)); // 壹拾億元整  
	        System.out.println(Huan(1234567890)); // 壹拾貳億叄仟肆佰伍拾陸萬柒仟捌佰玖拾元整  
	        System.out.println(Huan(1001100101)); // 壹拾億零壹佰壹拾萬零壹佰零壹元整  
	        System.out.println(Huan(110101010)); // 壹億壹仟零壹拾萬壹仟零壹拾元整  
	        System.out.println();  
	        // 小數  
	        System.out.println(Huan(0.12)); // 壹角貳分  
	        System.out.println(Huan(123.34)); // 壹佰貳拾叄元叄角肆分  
	        System.out.println(Huan(97001.34)); // 壹佰貳拾叄元叄角肆分  
	        System.out.println(Huan(1000000.56)); // 壹佰萬元伍角陸分  
	        System.out.println(Huan(100000001.78)); // 壹億零壹元柒角捌分  
	        System.out.println(Huan(1000000000.90)); // 壹拾億元玖角  
	        System.out.println(Huan(1234567890.03)); // 壹拾貳億叄仟肆佰伍拾陸萬柒仟捌佰玖拾元叄分  
	        System.out.println(Huan(1001100101.00)); // 壹拾億零壹佰壹拾萬零壹佰零壹元整  
	        System.out.println(Huan(110101010.10)); // 壹億壹仟零壹拾萬壹仟零壹拾元壹角  
	           
	        // 負數  
	     /*   System.out.println(Huan(-0.12)); // 負壹角貳分  
	        System.out.println(Huan(-123.34)); // 負壹佰貳拾叄元叄角肆分  
	        System.out.println(Huan(-1000000.56)); // 負壹佰萬元伍角陸分  
	        System.out.println(Huan(-100000001.78)); // 負壹億零壹元柒角捌分  
	        System.out.println(Huan(-1000000000.90)); // 負壹拾億元玖角  
	        System.out.println(Huan(-1234567890.03)); // 負壹拾貳億叄仟肆佰伍拾陸萬柒仟捌佰玖拾元叄分  
	        System.out.println(Huan(-1001100101.00)); // 負壹拾億零壹佰壹拾萬零壹佰零壹元整  
	        System.out.println(Huan(-110101010.10)); // 負壹億壹仟零壹拾萬壹仟零壹拾元壹角  
			
		*/
}}