本帖最后由 as604049322 于 2014-12-27 22:02 编辑
望大牛能够优化一下!
思路:将一个数字字符串分解成4位数,然后将这些分解并处理好的结果用万、亿连接起来。
- //金额转换,阿拉伯数字转换成中国传统形式。例如:101000001010 转换为壹仟零壹拾亿零壹仟零壹拾 圆整
- class GetChineseNum
- {
- public static void main(String[] args) {
- sop(getMoneyNum("333600000"));
- sop(getUppercaseNum("333600000"));
- }
- public static void sop(Object o) {
- System.out.println(o);
- }
- public static String getMoneyNum(String numStr){
- if(numStr.equals("0"))
- return "零 圆整";
- String result=getChineseNum(numStr,true);
- if(result.equals(""))
- return "转换失败,数值过大或者参数有误";
- //头部去零
- while(result.charAt(0)=='零')
- result=result.substring(1,result.length());
- return result+" 圆整";
- }
- public static String getUppercaseNum(String numStr){
- String result=getChineseNum(numStr,false);
- //头部去零
- while(result.charAt(0)=='零')
- result=result.substring(1,result.length());
- return result;
- }
- private static String getChineseNum (String num, boolean money){
- /*-----------对小于一万的数据进行处理,------------*/
- if(num.length()<=4) {
- String result="";
- char[] numSheet={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
- char[] numSheet2={'零','一','二','三','四','五','六','七','八','九'};
- char[] UnitArr={'仟','佰','拾'};
- char[] UnitArr2={'千','百','十'};
- while(num.length()!=4){//对不足四位的数前面补零,直到变成4位
- num="0"+num;
- }
- //遍历4位数的4个数字
- for(int i=0;i<=3;i++) {
- int temp=new Integer(num.charAt(i)+"");
- /*
- 分为当前位等于0和不等于0的情况
- 当当前位等于0时,如果是千位就直接赋值零
- 如果不是千位,则判断前面一位是否为零,不是的话就赋值
- */
- if(temp!=0){
- result+=(money?numSheet[temp]:numSheet2[temp]);
- if(i!=3) result+=(money?UnitArr[i]:UnitArr2[i]);
- }else{//当前位为零
- if(i==0){
- result+="零";
- }else{
- temp=new Integer(num.charAt(i-1)+"");
- if(temp!=0) result+="零";
- }
- }
- }
- //清楚尾部的零
- if(result.charAt(result.length()-1)=='零')
- result=result.substring(0,result.length()-1);
- return result;
- }
- /*-----------对大于等于一万小于一亿的数据进行处理------------*/
- if(num.length()<=8 && num.length()>4){
- String left=getChineseNum(num.substring(0,num.length()-4),money);
- String right=getChineseNum(num.substring(num.length()-4,num.length()),money);
- if(left.equals("")){
- if(!right.equals("") && right.charAt(0)=='零')
- return right;
- else
- return "零"+right;
- }
- return left+(money?"萬":"万")+right;
- }
- /*-----------对大于等于一亿小于一亿亿的数据进行处理------------*/
- if(num.length()<=16 && num.length()>8){
- String left=getChineseNum(num.substring(0,num.length()-8),money);
- String right=getChineseNum(num.substring(num.length()-8,num.length()),money);
- if(left.equals("零"))
- return right;
- return left+"亿"+right;
- }
- /*-----------2014年国民生产总值也不到一亿亿,再高的就不处理了------------*/
- if(num.length()<=32 && num.length()>16){
- String left=getChineseNum(num.substring(0,num.length()-16),money);
- String right=getChineseNum(num.substring(num.length()-16,num.length()),money);
- if(left.equals("零"))
- return right;
- return left+"亿亿"+right;
- }
- return "";
- }
- }
复制代码 |