java語言輸出金額x的中文大寫形式字串
阿新 • • 發佈:2019-01-06
import java.util.Scanner; /** * 輸入數字金額,以大寫形式輸出。已優化 * 有bug 當輸入123.4時,出現的結果為壹佰貳拾叄元肆分 * 當輸入123.45時,出現的結果為壹佰貳拾叄元肆角伍分 * @author xuliang * */ public class RMB { public static String toString(double x) { String[] capital = { "零", "壹", "貳", "叄", "肆", "伍", "陸", "柒", "捌", "玖" }; String[] integerUnit = { "", "拾", "佰", "仟", "萬" }; String[] floatUnit = { "分", "角" }; String money = Double.toString(x);// 得到字串形式的金額資訊 System.out.println(money); String[] dot = money.split("\\.");// 拆分字串 // System.out.println(dot.length); // System.out.println(dot[0]); // System.out.println(dot[1]); int per = Integer.parseInt(dot[0]);// 將整數部分放入int型變數中 int after = Integer.parseInt(dot[1]);// 將小數部分放到int型變數中 int perLong = dot[0].length();//計算小數點前面部分的長度 int afterLong = dot[1].length();//計算小數點後面部分的長度 for (int i = perLong; i > 0; i--) {//輸出小數點前面部分的大寫形式 int every = per / (int) (Math.pow(10, (i - 1)));//相當於座標,對應capital陣列下標 per = per % (int) (Math.pow(10, (i - 1))); if(every==0){//如果有0則跳出本層迴圈,進入下層 break; } System.out.print(capital[every]);//輸出數字大寫 System.out.print(integerUnit[i - 1]);//輸出單位, } System.out.print("元"); if (!dot[1].equals("0")) {//當小數部分存在時才執行 // for(int i=0;i<afterLong;i++) {//原理與整數部分相同 // int every=after/(int)(Math.pow(10,afterLong-i)); // System.out.print(capital[every]); // System.out.print(floatUnit[i]); // after=after%(int)(Math.pow(10, afterLong-i)); // } for (int i = afterLong; i > 0; i--) { int every = after / (int) (Math.pow(10, (i - 1))); after = after % (int) (Math.pow(10, (i - 1))); System.out.print(capital[every]); System.out.print(floatUnit[i - 1]); } } else { System.out.print("整"); } return null; } public static void main(String[] args) { RMB r = new RMB(); Scanner scan=new Scanner(System.in); System.out.println("請輸入金額"); double d=scan.nextDouble(); r.toString(d); } }