做项目中遇到 数字 需要转化为 大写汉字 的问题,
如 数字987654321,转成大写的:玖亿捌仟柒佰陆拾伍万肆仟叁佰贰拾壹。
我看网上的这种问题基本都是在做计算金额的填写时使用,我此处不需要这些,所以也就没有做成金额问题,等有时间了再
修改一下。下面的是代码,有时间的话再修改一下,感觉不太好,但能实现基本功能,就是在拾万、佰万、仟万、亿、拾亿
遇零需要的特殊处理。
看到网上基本都是采用字符串的形式进行处理,我这里依然采用数据形式,处理的时候遇零有些麻烦。
代码如下:
public static StringBuffer intForString(int num){
String[] CN = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
int[] t1 = {10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
String[] temp = {"拾","佰","仟","万","拾","佰","仟","亿","拾"};
String[] temp2 = {"拾","佰","仟","万","拾万","佰万","仟万","亿","拾亿"};
int flag1 = 0;
int flag2 = 0;
StringBuffer cn = new StringBuffer();
if(num < 0){
cn.append("此方法不支持负数处理");
return cn;
}else if(num > 2147483647){
cn.append("此方法为int型数值,最大不能超过其范围2147483648");
return cn;
}
if(num < 10){
cn.append(CN[num]);
}
for (int i = temp.length; i >= 0; i--) {
if( i >= 1 && num >= t1[i - 1]){
flag1 = num/t1[i-1];
flag2 = num%t1[i-1];
if(flag1 < 10 && flag1 != 0){
cn.append(CN[flag1]);
if(i>=2 && flag2 < t1[i -2]){
cn.append(temp2[i-1]);
if(flag2 != 0){
cn.append(CN[0]);
}
}else{
cn.append(temp[i-1]);
}
}
if(flag2 < 10 && flag2 != 0){
cn.append(CN[flag2]);
}
num = flag2;
}
}
return cn;
}