將浮點數轉換成人命幣讀法字串 java版
阿新 • • 發佈:2018-12-13
題目:編寫一個程式,將浮點數轉換成人命幣讀法字串,例如,將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)); // 負壹億壹仟零壹拾萬壹仟零壹拾元壹角 */ }}