数字金额转大写金额 工具类
代码如下:
/*
* 金额转为汉字大写
* @return
* @throws
* @author TomatoYan
*/
public class NumberToCN {
/*
汉字中数字大写
*/
public static final String[] CN_UPPER_NUMBER_HEAD = {"元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"};
public static final String[] CN_UPPER_NUMBER_COUNT = {"","元","元","元","","万元","万元","万元","","亿元","亿元","亿元"};
/*
汉字中小数点后的大写
*/
public static final String[] CN_UPPER_NUMBER_TAIL = {"分", "角"};
/*
汉字单位大写
*/
public static final String[] CN_UPPER_MONEY_UNIT = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
/*
特殊字符:整
*/
public static final String CN_FULL = "整";
/*
特殊字符:零元整
*/
public static final String CN_ZERO_FULL = "零元" + CN_FULL;
/*
将输入的金额转换为对应的汉字大写
*/
public String changeAmtToCN(String amtStr) {
String loanAmt = CN_ZERO_FULL;
if (Double.parseDouble(amtStr) != 0) {
String[] amtArr = amtStr.split("\\.");
if (amtArr.length > 1) {
String amtHead = amtArr[0];
String amtTail = amtArr[1];
loanAmt = Double.parseDouble(amtTail) == 0 ? (changeAmtHeadToCN(amtHead) + CN_FULL) : (changeAmtHeadToCN(amtHead) + changeAmtTailToCN(amtTail));
} else {
String amtHead = amtArr[0];
loanAmt = changeAmtHeadToCN(amtHead) + CN_FULL;
}
}
return loanAmt;
}
/*
小数点前
*/
public String changeAmtHeadToCN(String headStr) {
StringBuffer sb = new StringBuffer();
Double head = Double.parseDouble(headStr);
int count = 0;
boolean flag = true;
for (int i = 0; i < headStr.length(); i++) {
int x = (int) (head % 10);
if(x==0&&flag) {
count++;
head = head / 10;
}else{
flag=false;
sb.append(CN_UPPER_NUMBER_HEAD[i]);
sb.append(CN_UPPER_MONEY_UNIT[x]);
head = head / 10;
}
}
return count == 0?sb.reverse().toString():sb.reverse().append(CN_UPPER_NUMBER_COUNT[count]).toString();
}
/*
小数点后
*/
public String changeAmtTailToCN(String tailStr) {
StringBuffer sb = new StringBuffer();
int tail = Integer.parseInt(tailStr);
for (int i = 0; i < tailStr.length(); i++) {
int x = tail % 10;
sb.append(CN_UPPER_NUMBER_TAIL[i]);
sb.append(CN_UPPER_MONEY_UNIT[x]);
tail = tail / 10;
}
return sb.reverse().toString();
}
public static void main(String[] args) {
String strArr[] = {"1","10","100","1000","10000","100000","1000000","10000000","100000000","1000000000","10000000000","100000000000"};
for (String str :strArr) {
System.out.println(str+","+new NumberToCN().changeAmtToCN(str));
}
}
}
由于是用数组来控制位数的所以最大支持壹仟亿,由于int值最多为2^32所以,使用了Double来做存储。