JAVA 数字转汉字数字

思路:

        创建0至9的汉字数组和单位数组,方便下面取出对应汉字及单位

        先转成数组,从左到右转汉字,取对应的单位。

        遇到 0 和 单位级别切换时,需要注意单位完整性

代码:

    public static String numberToChinese(long number) {
        final String[] chineseNum = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
        final String[] unit = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千"};
        final String[] unit_type = {"", "万", "亿"};
        // 转数组
        char[] numberArray = (number + "").toCharArray();
        // 拼接成字符串
        StringBuilder dst = new StringBuilder("");
        // 循环 上次数字是否是 0
        boolean zero = false;
        // 单位级别
        int type = numberArray.length / 4;
        if (numberArray.length % 4 == 0) {
            // 刚好是级别切换
            type--;
        }
        for (int i = 0; i < numberArray.length; i++) {
            int num = (int) numberArray[i] - 48;
            // 判断是否到了级别切换
            if (i > 0 && (numberArray.length - i) % 4 == 0) {
                //级别切换时,上次为 0,补齐单位名称
                if (zero) {
                    dst.append(unit_type[type]);
                }
                type--;
            }
            // 数字为0跳过
            if (num == 0) {
                zero = true;
                continue;
            }
            // 上次为0 且不是级别切换时,添加一个零,
            if (zero) {
                dst.append(chineseNum[0]);
            }
            // 数字
            dst.append(chineseNum[num]);
            // 单位
            if (i < numberArray.length - 1) {
                dst.append(unit[numberArray.length - i - 1]);
            }
            // 上次数字,设置为非 0
            zero = false;
        }
        return dst.toString();
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值