论坛首页 入门技术论坛

金钱表示转换(阿拉伯数字to汉字)

浏览 1926 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-31   最后修改:2009-08-01
懒得写小数后的转换了,以后有时间补上

public class MoneyConvent {
    
    //不用String是因为String内部还是char数组,自己用数组用随机查找快一点
    private static final char[] HanChar={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
    private static final char[] sbq={'个','拾','佰','仟'};
    private static final char[] wy={'亿','万'};
    
    
    public static String fromArabToCharacter(String arab){
        //预设一个较大的空间存储转换后的汉字序列     
        char[] temp=new char[arab.length()*3];
        int j=0;
        //遍历每一位数字
        for (int i = 0; i < arab.length(); i++) {
            //如果是万位或亿位并且不是零位,有可能要加万或亿字
            if((i%4==0) && i!=0){
                //i能进来说明i只能是4的倍数,wy[(i+1)/4%2]=='亿' 看该数字位数i是否是8的倍数(输出亿) 否则就是4的倍数(有可能输出万)
                if(wy[(i+1)/4%2]=='亿' || !isWanZero(arab, i)){
                    temp[j++]=wy[(i+1)/4%2];
                }
            }
            //如果该位上是0就什么都不加
            if(getHanChar(arab,i)=='零'){
                continue;
            }
            //如果不是4的倍数,就加上相应的 十 百 千
            if((i%4)!=0){
                temp[j++]=sbq[i%4];
            }
            //加上该位上数字的汉字
            temp[j++]=getHanChar(arab,i);
        }
        //转换成StringBuffer后反转序列然后去掉空位加上圆,整数部分就完成了
        StringBuffer sb=new StringBuffer(String.valueOf(temp));
        return sb.reverse().toString().trim()+"圆";
    } 
    
    //需不需要输出万字, 主要看万位到下一个亿位之前是否全是0
    private static boolean isWanZero(String arab,int i){
        if(getHanChar(arab,i)!='零'){
            return false;
        }else if(getHanChar(arab,i+1)!='零'){
            return false;
        }else if(getHanChar(arab,i+2)!='零'){
            return false;
        }else if(getHanChar(arab,i+3)!='零'){
            return false;
        }
        return true;
    }
    
    private static char getHanChar(String arab,int i){
        return HanChar[Integer.parseInt(arab.substring(arab.length()-1-i, arab.length()-i))];
    }
    
    public static void main(String[] args) {
        System.out.println(fromArabToCharacter("65432109876543210"));
        System.out.println(fromArabToCharacter("10200400000000000"));
    }
}

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics