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

来源:互联网 发布:java web报表开发工具 编辑:程序博客网 时间:2024/04/28 08:20

安卓中遇到的    后台返回的接口数据为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 0
原创粉丝点击