闲着无聊,自己写了一个 阿拉伯数字转化为中国文字数字,望大家多多指正
package test;
public class NumberRev {
public String ReverseToCn(String num) {
char firstNum;// 第一个数字
char point;// 寻找小数点
String returnString = "";// 返回值
// 提取数字部分
int i = 0;
for (; i < num.length(); i++) {
firstNum = num.charAt(i);
if (isNumber(String.valueOf(firstNum)))
break;
if (i == (num.length() - 1))
return "所转换的字符不合法";
}
String realNum = num.substring(i, num.length());
String beforePoint = realNum;
String afterPoint = null;
// 分别提取整数和小数部分
for (int j = 0; j < num.length(); j++) {
point = num.charAt(j);
if (String.valueOf(point).equals(".")) {
beforePoint = num.substring(i, j);
afterPoint = num.substring(j + 1, num.length());
break;
}
}
// 显示为中文
for (int k = 0; k < beforePoint.length(); k++) {
String getCn = getCn(beforePoint.substring(k, k + 1));
if (!getCn.equals("零")) {// 非零情况
returnString += getCn;
returnString += getBit(beforePoint.length() - k);
} else if (!zeroIsLast(beforePoint, k)
&& (!String.valueOf(beforePoint.charAt(k - 1)).equals("0"))) {
// 有零的情况,且零在数字中间,且上一个数字不是零
returnString += "零";
}
}
returnString+="元";
//小数点后的数字
if(afterPoint!=null){
for(int k=0;k<afterPoint.length();k++){
returnString+=getCn(String.valueOf(afterPoint.charAt(k)));
if(k==0)
returnString+="角";
if(k==1)
returnString+="分";
}
}else{
returnString+="整";
}
return returnString;
}
public boolean zeroIsLast(String num, int zeroLocation) {// 判断零的位置
if (zeroLocation == (num.length() - 1))// 零在末尾
return true;
for (; zeroLocation < num.length(); zeroLocation++) {
if (!String.valueOf(num.charAt(zeroLocation)).equals("0")) {// 只要零后面有非零的数就立即返回
return false;
}
}
return true;
}
public String getBit(int num) {
String word = "";
switch (num) {
case 2:
word = "拾";
break;
case 3:
word = "佰";
break;
case 4:
word = "仟";
break;
case 5:
word = "万";
break;
case 6:
word = "拾";
break;
case 7:
word = "佰";
break;
case 8:
word = "仟";
break;
case 9:
word = "亿";
break;
case 10:
word = "拾";
break;
case 11:
word = "百";
break;
case 12:
word = "千";
break;
}
return word;
}
public String getCn(String num) {
int n = Integer.valueOf(num);
String cn = "";
switch (n) {
case 0:
cn = "零";
break;
case 1:
cn = "壹";
break;
case 2:
cn = "贰";
break;
case 3:
cn = "叁";
break;
case 4:
cn = "肆";
break;
case 5:
cn = "伍";
break;
case 6:
cn = "陆";
break;
case 7:
cn = "柒";
break;
case 8:
cn = "捌";
break;
case 9:
cn = "玖";
break;
}
return cn;
}
public boolean isNumber(String word) {
if (word.length() != 1)
return false;
if (word.equals("1") || word.equals("2") || word.equals("3")
|| word.equals("4") || word.equals("5") || word.equals("6")
|| word.equals("7") || word.equals("8") || word.equals("9")
|| word.equals("0"))
return true;
return false;
}
public static void main(String[] args) {
NumberRev n = new NumberRev();
System.out.println(n.ReverseToCn("¥45870014.458"));
System.out.println(n.ReverseToCn("¥458700140458"));
}
}
结果为:
肆仟伍佰捌拾柒万零壹拾肆元肆角伍分捌
肆千伍百捌拾柒亿零壹拾肆万零肆佰伍拾捌元整