[原创]人民币金额小写转大写工具(java)

以前的刚接触java写的一个小程序,无聊整理一下以前的东东又翻出来了,所以分享一下。。。

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// System.out.println(amountConvert2Cn("1234567890"));
System.out.println(amountConvert2Cn("1000000023"));
// System.out.println(amountConvert2Cn("28900200"));
}

private final static String[] _NUMUPPER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };

private final static String[] _SMALLUNIT = { "", "拾","佰","仟"};
private final static String[] _BIGUNIT = { "","", "万","亿"};
private final static String[] _AMONTUNIT = { "元","角", "分"};

public static String amountConvert2Cn(String amount){

StringBuilder buff = new StringBuilder();

String[] splits = amount.replaceAll(",", "").split("\\.");
final String yuan = splits[0];
//final String jiaofen = splits[1];

int btyes = yuan.length();
//分割段数(4位一段,第一段位数<=4)
int partCounts = btyes%4==0?btyes/4:(btyes/4+1);
//第一部分长度
int firstPartLen = btyes%4==0?4:btyes%4;
//
String smallNumConvert = smallNumConvert(yuan.substring(0,firstPartLen));
buff.append(formatAllZore(smallNumConvert,_BIGUNIT[partCounts]));

for (int i = 1; i < partCounts; i++) {
String temp = yuan.substring(firstPartLen+i*4-4,firstPartLen+i*4);
buff.append(formatAllZore(smallNumConvert(temp),_BIGUNIT[partCounts-i]));
}

buff.append(_AMONTUNIT[0]);

return buff.toString().replaceAll("零+", "零");
}

private static String formatAllZore(String numConvert,String unit){
return "零".equals(numConvert)?numConvert:(numConvert+unit);
}

/**
* 千位计数以内转换处理
* @param num 1234
* @return
*/
private static String smallNumConvert(String num){
StringBuilder buff = new StringBuilder();

if(Integer.parseInt(num)==10)
return "拾";
if(Integer.parseInt(num)==0)
return "零";

char[] arrays = num.toCharArray();

for (int i = 0; i < arrays.length; i++) {
int number = Integer.parseInt(String.valueOf(arrays[i]));
buff.append(_NUMUPPER[number]);
if(number!=0){
buff.append(_SMALLUNIT[arrays.length-i-1]);
}
}

String tmp = buff.toString().replaceAll("零+", "零");
if(tmp.endsWith("零"))
tmp = tmp.substring(0,tmp.length()-1);
return tmp;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值