金額轉換類代碼如下,直接調用changeNumberToCNY方法返回大寫金額結果
/** * 將數值型金額轉換成大寫金額 * */ public class NumberToCNY { /** * 將數字金額轉換成大寫金額 * @param number * @return */ public String changeNumberToCNY(String number){ //如果傳入""即爲"空值" if ("".equals(number)) { return "空值,請重新輸入!"; } //非數字型 double dNumber; try { dNumber = Math.abs(Double.parseDouble(number)); } catch (NumberFormatException e) { return "輸入錯誤,請重新輸入!"; } // 將這個數轉換成 double類型,並對其取絕對值後進行四捨五入操作 dNumber = (dNumber * 100); dNumber = Math.round(dNumber); dNumber = dNumber/100.0; // 將 dNumber進行格式化 否則會以科學計數型輸出 number = new java.text.DecimalFormat("##0.00").format(dNumber); //規定數值的最大長度只能到萬億單位,否則返回 "溢出" int index = number.indexOf("."); if (number.substring(0,index).length()>13) { return "數據溢出,請重新輸入!"; } return clearZero(splitNumber(number)); } /** * 將數字格式化成中文 * @param flag 1表示整數部分 2表示小數部分 * @param number * @return */ private String numberFormat(int flag, String number){ // 貨幣大寫形式 String bigLetter[] = {"零", "壹", "貳", "叄", "肆", "伍", "陸", "柒", "捌", "玖"}; // 貨幣單位 String unit[] = {"元", "拾", "佰", "仟", "萬", // 拾萬位到仟萬位 "拾", "佰", "仟", // 億位到萬億位 "億", "拾", "佰", "仟", "萬"}; String small[] = {"角","分"}; StringBuffer newNumber=new StringBuffer(); for (int i = 0; i < number.length(); i++) { if (flag==1) { newNumber //char型數字轉成int型數字相要-48 char 3 相當於 int的51 .append(bigLetter[number.charAt(i)-48]) //單位 .append(unit[number.length()-i-1]); } if (flag==2) { newNumber //char型數字轉成int型數字相要-48 char 3 相當於 int的51 .append(bigLetter[number.charAt(i)-48]) //單位 .append(small[i]); } } return newNumber.toString(); } /** * 以小數點爲界分割開 * @param number * @return */ private String splitNumber(String number){ //取得小數點前後2部分 int index = number.indexOf("."); String intOnly = number.substring(0,index); String smallOnly = number.substring(index+1); //將前後2部分轉換成中文金額 String intNew = numberFormat(1, intOnly); String smallNew = numberFormat(2, smallOnly); return intNew+smallNew; } /** * 清理字符串中多餘的零 * @param number * @return */ private String clearZero(String number){ while(number.charAt(0) == '零') { // 將字符串中的 "零" 和它對應的單位去掉 number = number.substring(2); // 如果用戶當初輸入的時候只輸入了 0,則只返回一個 "零" if(number.length() == 0) { return "零元"; } } // 字符串中存在多個'零'在一起的時候只讀出一個'零',並省略多餘的單位 String regex1[] = {"零仟", "零佰", "零拾"}; String regex2[] = {"零億", "零萬", "零元"}; String regex3[] = {"億", "萬", "元"}; String regex4[] = {"零角", "零分"}; // 第一輪轉換把 "零仟", 零佰","零拾"等字符串替換成一個"零" for(int i = 0; i < 3; i ++) { number = number.replaceAll(regex1[i], "零"); } // 第二輪轉換考慮 "零億","零萬","零元"等情況 // "億","萬","元"這些單位有些情況是不能省的,需要保留下來 for(int i = 0; i < 3; i ++) { // 當第一輪轉換過後有可能有很多個零疊在一起 // 要把很多個重複的零變成一個零 number = number.replaceAll("零零零", "零"); number = number.replaceAll("零零", "零"); number = number.replaceAll(regex2[i], regex3[i]); } // 第三輪轉換把"零角","零分"字符串省略 for(int i = 0; i < 2; i ++) { number = number.replaceAll(regex4[i], ""); } // 當"萬"到"億"之間全部是"零"的時候,忽略"億萬"單位,只保留一個"億" number = number.replaceAll("億萬", "億"); if (number.charAt(number.length()-1)=='元') { number = number+"整"; } return number; } }