『壹』 求有效的數字金額轉漢字大寫JAVA源碼
package com.heyang;
/**
* 將10億以內的阿拉伯數字轉成漢字大寫形式
* @author xizhenyin
*
*/
public class CnUpperCaser {
// 整數部分
private String integerPart;
// 小數部分
private String floatPart;
// 將數字轉化為漢字的數組,因為各個實例都要使用所以設為靜態
private static final char[] cnNumbers={'零','壹','貳','叄','肆','伍','陸','柒','捌','玖'};
// 供分級轉化的數組,因為各個實例都要使用所以設為靜態
private static final char[] series={'元','拾','百','仟','萬','拾','百','仟','億'};
/**
* 構造函數,通過它將阿拉伯數字形式的字元串傳入
* @param original
*/
public CnUpperCaser(String original){
// 成員變數初始化
integerPart="";
floatPart="";
if(original.contains(".")){
// 如果包含小數點
int dotIndex=original.indexOf(".");
integerPart=original.substring(0,dotIndex);
floatPart=original.substring(dotIndex+1);
}
else{
// 不包含小數點
integerPart=original;
}
}
/**
* 取得大寫形式的字元串
* @return
*/
public String getCnString(){
// 因為是累加所以用StringBuffer
StringBuffer sb=new StringBuffer();
// 整數部分處理
for(int i=0;i<integerPart.length();i++){
int number=getNumber(integerPart.charAt(i));
sb.append(cnNumbers[number]);
sb.append(series[integerPart.length()-1-i]);
}
// 小數部分處理
if(floatPart.length()>0){
sb.append("點");
for(int i=0;i<floatPart.length();i++){
int number=getNumber(floatPart.charAt(i));
sb.append(cnNumbers[number]);
}
}
// 返回拼接好的字元串
return sb.toString();
}
/**
* 將字元形式的數字轉化為整形數字
* 因為所有實例都要用到所以用靜態修飾
* @param c
* @return
*/
private static int getNumber(char c){
String str=String.valueOf(c);
return Integer.parseInt(str);
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(new CnUpperCaser("123456789.12345").getCnString());
System.out.println(new CnUpperCaser("123456789").getCnString());
System.out.println(new CnUpperCaser(".123456789").getCnString());
System.out.println(new CnUpperCaser("0.1234").getCnString());
System.out.println(new CnUpperCaser("1").getCnString());
System.out.println(new CnUpperCaser("12").getCnString());
System.out.println(new CnUpperCaser("123").getCnString());
System.out.println(new CnUpperCaser("1234").getCnString());
System.out.println(new CnUpperCaser("12345").getCnString());
System.out.println(new CnUpperCaser("123456").getCnString());
System.out.println(new CnUpperCaser("1234567").getCnString());
System.out.println(new CnUpperCaser("12345678").getCnString());
System.out.println(new CnUpperCaser("123456789").getCnString());
}
}