/**
* 數字轉換為大寫人民幣計數
* @author 王代軍
* @since Dec 16,2011
*/
public class Num2Rmb
{
private String[] hanArr = {"零" , "壹" , "貳" , "叁" , "肆" ,
"伍" , "陸" , "柒" , "捌" , "玖"};
private String[] unitArr = {"拾","百","千","萬"};
/**
* 把一個四位的數字字符串變成漢字字符串
* @param numStr 需要被轉換的四位的數字字符串
* @return 四位的數字字符串被轉換成的漢字字符串。
*/
private String toHanStr(String numStr)
{
String result = "";
int numLen = numStr.length();
//依次遍歷數字字符串的每一位數字
for (int i = 0 ; i < numLen ; i++ )
{
//把char型數字轉換成的int型數字,因為它們的ASCII碼值恰好相差48
//因此把char型數字減去48得到int型數字,例如'4'被轉換成4。
int num = numStr.charAt(i) - 48;
//如果不是最后一位數字,而且數字不是零,則需要添加單位(千、百、十)
if ( i != numLen - 1 && num != 0)
{
result += hanArr[num] + unitArr[numLen - 2 - i];
}
//否則不要添加單位
else
{
//上一個數是否為“零”,不為“零”時就添加
if(result.length()>0 && hanArr[num].equals("零") && result.charAt(result.length()-1)=='零')
continue;
result += hanArr[num];
}
}
//只有個位數,直接返回
if(result.length()==1)
return result;
int index=result.length()-1;
while(result.charAt(index)=='零'){
index--;
}
if(index!=result.length()-1)
return result.substring(0,index+1);
else {
return result;
}
}
/**
* 把一個輸入的數字字符串變成漢字字符串
* @param numStr 需要被轉換得到數字字符串
* @return 數字字符串被轉換成的漢字RMB字符串。
*/
private String toRmbStr(String numStr){
//獲取字符串長度
int numLen = numStr.length();
//判斷長度小于4(一萬以內~0-9999) 調用toHanStr();
if(numLen<=4){
return toHanStr(numStr);
}
//4<長度<=8 (一億以內 1000-99999999)
else if(numLen>4&&numLen<=8){
String[] subArr={numStr.substring(0, numLen-4),numStr.substring(numLen-4, numLen)};
return toHanStr(subArr[0])+"萬"+toHanStr(subArr[1]);
}
//8<長度<=10 (百億以內 一億-9999999999)
else if(numLen>8&&numLen<=10){
String[] subArr={numStr.substring(0,numLen-8),numStr.substring(numLen-8,numLen-4),numStr.substring(numLen-4,numLen)};
return toHanStr(subArr[0])+"億"+toHanStr(subArr[1])+"萬"+toHanStr(subArr[2]);
}
else return "輸入有誤!";
}
public static void main(String[] args)
{
Num2Rmb nr = new Num2Rmb();
System.out.println("只支持整數(0~99億)");
//測試把一個四位的數字字符串變成漢字字符串
System.out.println(nr.toRmbStr("1"));
System.out.println(nr.toRmbStr("10"));
System.out.println(nr.toRmbStr("15"));
System.out.println(nr.toRmbStr("110"));
System.out.println(nr.toRmbStr("123"));
System.out.println(nr.toRmbStr("105"));
System.out.println(nr.toRmbStr("1000"));
System.out.println(nr.toRmbStr("1101"));
System.out.println(nr.toRmbStr("1110"));
System.out.println(nr.toRmbStr("1005"));
System.out.println(nr.toRmbStr("101105"));
System.out.println(nr.toRmbStr("1011109"));
System.out.println(nr.toRmbStr("9999999999"));
}
}
posted on 2011-12-26 13:26
Tomas 閱讀(564)
評論(0) 編輯 收藏