Java金額轉換_阿拉伯數字轉換成中國大寫數字
阿新 • • 發佈:2019-02-13
這個題目我在網上看到有好多種做法,我自己也想出了一種做法
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /* * 思路: * 1.定義三張表,儲存中文數字和貨幣單位。 * 2.鍵盤錄入使用IO流的BufferedReader進行接收鍵盤錄入。 * 3.把錄入的阿拉伯數字弄成字元陣列,如果有小數位就先分割成整數位和小數位。 * 4.先處理整數位再處理小數位,把每個數字所在位置的角標對著中文數字的表進行轉換, * 轉換完後再從對應的位置插入貨幣單位。 * 5.把格式進行修正匹配後列印輸出。 */ public class MoneyConvert { //建立中文大寫數字的表和貨幣單位的表 static String[] cnNumTab = {"零", "壹", "貳", "叄", "肆", "伍", "陸", "柒","捌", "玖"}; static String[] integerUnitTab = {"", "拾", "佰", "仟", "萬", "拾", "佰", "仟", "億", "拾", "佰", "仟"}; static String[] decimalUnitTab = {"角", "分", "釐"}; public static void main(String[] args) { System.out.println("請輸入金額:"); //建立流物件,用於接收鍵盤錄入的資料 BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); try { //把鍵盤接收的金額資料的小數位和整數位分隔開 String str = in.readLine(); String[] strArr = str.split("\\."); //把分隔好的數位金額資料分別打散成字元陣列 char[] chNumArrInteger = strArr[0].toCharArray(); //把阿拉伯數字轉換為中文的大寫數字 String[] convertIntegerNum = convertUpper(chNumArrInteger); //定義合拼數字和單位用的容器 StringBuilder container = new StringBuilder("圓整"); //嵌入貨幣單位到轉換好的中文大寫數字裡去 for(int x = convertIntegerNum.length -1, y = 0; x >=0; x--, y++) { String num = convertIntegerNum[x]; if(num.equals("零")) { //判斷數位是否是仟萬億的位置,是則插入單位 if(y == 4 || y == 8) container.insert(0, num+integerUnitTab[y]); else container.insert(0, num); } else { container.insert(0, num+integerUnitTab[y]); } } //如果有小數位,則對小數位的數也進行同樣的轉換操作 if(strArr.length == 2) { int len = container.length(); container.replace(len - 2, len, "圓"); char[] chNumArrDecimal = strArr[1].toCharArray(); String[] convertDecimalNum = convertUpper(chNumArrDecimal); //嵌入貨幣單位到轉換好的中文大寫數字裡去 for (int x = 0; x < convertDecimalNum.length; x++) { container.append(convertDecimalNum[x]+decimalUnitTab[x]); } } //格式修正 String put = container.toString(); put = put.replaceAll("佰零+萬", "佰萬"); put = put.replaceAll("佰零+億", "佰億"); put = put.replaceAll("仟零+萬", "仟萬"); put = put.replaceAll("仟零+億", "仟億"); put = put.replaceAll("零+", "零"); put = put.replaceAll("零萬", "萬"); put = put.replaceAll("零萬零", "零"); put = put.replaceAll("拾零", "拾"); put = put.replaceAll("零圓", "圓"); //完成後列印輸出 System.out.println("該金額的大寫形式為:"+put); } catch (NumberFormatException e) { System.out.println("輸入錯誤,請輸入有效的金額數字"); } catch (IOException e) { e.printStackTrace(); } //鍵盤錄入接收完資料後流會自然斷開了,無需呼叫關流資源的方法了 } //把阿拉伯數字轉換為中文的大寫數字 public static String[] convertUpper(char[] arr) { String[] convertNum = new String[arr.length]; for(int x = 0; x < arr.length; x++) { int num = Integer.parseInt(arr[x]+""); convertNum[x] = cnNumTab[num]; } return convertNum; } }
方法貌似有些麻煩,還在學習中,寫得可能不太好。