java中数字转化为中文大写(类似一,十,二十一,一百零一)

安卓中遇到的    后台返回的接口数据为int类型。需要自己转换为大写的一  二(比如第一组  第二组  十组   二十组),工具类方法,网上大多是金额转换

   我随意找了个方法改了下。有需要的直接copy  加到工具类就好了

 /**
     * 数字转换为大写汉字
     *
     * @param value
     * @return
     */
    public static String changeToBig(int value) {
        char[] hunit = {'十', '百', '千'};                                               //段内位置表示
        char[] vunit = {'万', '亿'};                                                     //段名表示
        char[] digit = {'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'};  //数字表示
        long midVal = (long) (value * 100);                                      //转化成整形
        String valStr = String.valueOf(midVal);                                //转化成字符串
        String head = valStr.substring(0, valStr.length() - 2);               //取整数部分

        String prefix = "";                                                                 //整数部分转化的结果

        //处理小数点前面的数
        char[] chDig = head.toCharArray();                                                         //把整数部分转化成字符数组
        char zero = '0';                                                                                          //标志'0'表示出现过0
        byte zeroSerNum = 0;                                                                            //连续出现0的次数
        for (int i = 0; i < chDig.length; i++) {                                                               //循环处理每个数字
            int idx = (chDig.length - i - 1) % 4;                                                                //取段内位置
            int vidx = (chDig.length - i - 1) / 4;                                                                //取段位置
            if (chDig[i] == '0') {                                                                                  //如果当前字符是0
                zeroSerNum++;                                                                                 //连续0次数递增
                if (zero == '0') {                                                                                    //标志
                    zero = digit[0];
                }

                if (idx == 0 && vidx > 0 && zeroSerNum < 4) {
                    prefix += vunit[vidx - 1];
                    zero = '0';
                }
                continue;
            }
            zeroSerNum = 0;                                                                                    //连续0次数清零
            if (zero != '0') {                                                                                        //如果标志不为0,则加上,例如万,亿什么的
                prefix += zero;
                zero = '0';
            }
            prefix += digit[chDig[i] - '0'];                                                                        //转化该数字表示
            if (idx > 0) prefix += hunit[idx - 1];
            if (idx == 0 && vidx > 0) {
                prefix += vunit[vidx - 1];                                                                             //段结束位置应该加上段名如万,亿
            }
        }
        if (prefix.startsWith("一十")) {
            String[] strings = prefix.split("一十");
            System.out.println(strings.length);
            if (strings.length == 0) {
                prefix = "十";
            } else {
                prefix = "十" + strings[1];
            }

        }
        return prefix;                                                                                     //返回正确表示
    }


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值