Java/android 金额 数字转成大写汉子

今天翻看自己的代码,发现了自己写的金额数字转成大写的代码,当然我也是在别人的基础上修改的,当时从网上copy了一份代码,发现能用,但是有很多bug,然后自己在别人的基础上修改了一番,满足了自己的应用!现在粘贴出来,提供给大家,也为自己以后找着方便!

我就直接贴代码了,注释都很清楚!

public class MoneyFormat {
    private static final char[] UNIT={'亿','拾','佰','仟','万','拾','佰','仟'};
    private static final char[]  CHAINIESFIGURE2={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};


//整数部分的转换
    public static String toChineseCharI(String intString)throws NumberFormatException{
       
        //用来存放转换后的大写数字,因为是StringBuffer类型,所以顺便把没有转换
        //的数字倒序排列一下,省一个变量.
        StringBuffer ChineseCharI=new StringBuffer(intString);
        //倒序的数字,便于同单位合并
        String rintString=ChineseCharI.reverse().toString();
        //清空一下
        ChineseCharI.delete(0,ChineseCharI.length());
        //单位索引
        int unitIndex=0;
        //数字长度
        int intStringLen=intString.length();
        //一位由字符转换的数字
        int intStringnumber=0;
        //补0
        boolean addZero=false;
        boolean flagZero = false;
        for(int i=0;i<intStringLen;i++){
            //按单位长度循环索引
            unitIndex=i%UNIT.length;
           
            //异常检查
            if(!Character.isDigit(rintString.charAt(i)))    {
                throw new NumberFormatException("数字中含有非法字符");           
            }   
            intStringnumber=Character.digit(rintString.charAt(i),10);
                       
            //如果当前位是0,开启补0继续循环直到不是0的位
            if(intStringnumber==0){
                addZero=true;
                if(i!=0&&i%4==0){
                if(addZero&&ChineseCharI.length()!=0){
                        ChineseCharI.append(CHAINIESFIGURE2[0]);
                        addZero = false;
                    }
                flagZero = true;
                ChineseCharI.append(UNIT[unitIndex]);
                }
            }else{
                //若当前位不是第一位且补0开启
                if(addZero&&ChineseCharI.length()!=0&&!flagZero){
                    ChineseCharI.append(CHAINIESFIGURE2[0]);
                }
                flagZero = false;
                //插入单位
                //个位数后面不需 要单位
                if(i>0){
                System.out.println(i);
                    ChineseCharI.append(UNIT[unitIndex]);
                }
               
                //插入大写数字
                ChineseCharI.append(CHAINIESFIGURE2[intStringnumber]);   
                //补0关闭           
                addZero=false;               
            }
        }
       
        //异常处理
        if(ChineseCharI.length()==0){
            return "零";
        }
        return     ChineseCharI.reverse().toString()+"圆整";
       
    }
}

当然,上述代码也可能存在我没发现的bug,希望大家遇到后及时交流!共同进步!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值