package com.abc.ebank.util;
public class Digit2ChineseNumber {
public Digit2ChineseNumber() {
super();
}
public static String Number2Cap(String amount) {
amount = Num2ChCap(amount);
int decimal_address; //小數點的位置如果沒有小數點則值為數值長度加1;,有小數點則為小數點所在位置
String s_decimal = "";
if (amount.indexOf('.') != -1) { //有小數點的情況
decimal_address = amount.indexOf('.');
s_decimal = amount.substring(decimal_address + 1);
if (s_decimal.trim().equals("零零")) {
s_decimal = "";
} else if (s_decimal.trim().equals("零")) {
s_decimal = "";
} else {
s_decimal = DecAddUnit(s_decimal);
}
} else {
decimal_address = amount.length() + 1;
}
String s_Int = amount.substring(0, decimal_address);
s_Int = IntAddUnit(s_Int);
s_Int = Coordinate_String(s_Int); //整理字元串将一些多餘的東西去除
return s_Int + s_decimal + "整";
}
private static String Coordinate_String(String s_Int) {
int address;
//for循環去除零
for (; true;) {
address = s_Int.indexOf("零萬");
if (address == -1) {
address = s_Int.indexOf("零仟");
}
if (address == -1) {
address = s_Int.indexOf("零佰");
}
if (address == -1) {
address = s_Int.indexOf("零拾");
}
if (address == -1) {
address = s_Int.indexOf("零億");
}
if (address == -1) {
address = s_Int.indexOf("零元");
}
if (address == -1)
break;
System.err.println(s_Int.substring(0, address));
System.err.println(s_Int.substring(address + 2));
s_Int = s_Int.substring(0, address) + s_Int.substring(address + 1);
}
String tmp = "@億@萬@千@佰@拾億萬億仟億佰億拾萬仟萬佰萬拾仟佰仟拾佰拾";
s_Int = "@" + s_Int;
for (int i = 0; i < tmp.length();) {
String tmp1 = tmp.substring(i, i + 2);
address = 0;
for (; true;) {
address = s_Int.indexOf(tmp1);
if (address == -1)
break;
System.err.println(s_Int.substring(0, address + 1));
System.err.println(s_Int.substring(address + 2));
s_Int =
s_Int.substring(0, address + 1)
+ s_Int.substring(address + 2);
}
i += 2;
}
return s_Int.substring(1);
}
private static String IntAddUnit(String s_Int) {
String Units = "元拾佰仟萬拾佰仟億拾佰仟萬";
s_Int = StringOverTurn(s_Int);
int s_Int_length = s_Int.length();
String tmp = "";
for (int i = 0; i < s_Int_length; i++) {
tmp =
tmp
+ String.valueOf(Units.charAt(i))
+ String.valueOf(s_Int.charAt(i));
}
tmp = StringOverTurn(tmp);
return tmp;
}
private static String StringOverTurn(String s_Int) {
;
int s_Int_length = s_Int.length();
char[] Overtmp = s_Int.toCharArray();
String tmp = "";
for (int i = s_Int_length - 1; i > -1; i--) {
tmp = tmp + Overtmp[i];
}
return tmp;
}
private static String DecAddUnit(String returnString) {
switch (returnString.length()) {
//小數長度為1表示隻有角無分
case 1 :
returnString =
returnString.substring(0, 1)
+ "角"
+ returnString.substring(2);
break;
//小數長度為2表示有角有分
case 2 :
returnString =
returnString.substring(0, 1)
+ "角"
+ returnString.substring(1, 2)
+ "分";
break;
} //end of swtich
return returnString;
}
private static String Num2ChCap(String amount) {
int length = amount.length();
char CapNumber;
String returnString = "";
for (int i = 0; i < length; i++) {
CapNumber = amount.charAt(i);
switch (CapNumber) {
case '0' :
returnString = returnString + "零";
break;
case '1' :
returnString = returnString + "壹";
break;
case '2' :
returnString = returnString + "貳";
break;
case '3' :
returnString = returnString + "叁";
break;
case '4' :
returnString = returnString + "肆";
break;
case '5' :
returnString = returnString + "伍";
break;
case '6' :
returnString = returnString + "陸";
break;
case '7' :
returnString = returnString + "柒";
break;
case '8' :
returnString = returnString + "捌";
break;
case '9' :
returnString = returnString + "玖";
break;
case '.' :
returnString = returnString + ".";
break;
} //end of case;
} //end of for;
return returnString;
}
// public static void main(String[] args) {
// }
}