小工具知识网

当前位置: 首页 > 行业知识 > Java将数字金额转为大写中文金额和简体中文金额

行业知识

Java将数字金额转为大写中文金额和简体中文金额

2026-10-28 07:30:43 来源:互联网转载

Java实现 “ 将数字金额转为大写中文金额 ”

()

根据以上文章修改的,增加数字金额转简体中文金额,仅供参考

/** * @description  金额大写转换工具类 * @author */class AmountTransformUtils {    /**     * 繁体大写数字     */    private static final String[] NUMBERS = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};    /**     * 繁体整数部分的单位     */    private static final String[] IUNIT = {"元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"};    /**     * 繁体小数部分的单位      */    private static final String[] DUNIT = {"角", "分"};    /**     * 简体数字     */    private static final String[] CN_NUMBERS = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};    /**     * 简体数字单位     */    private static final String[] CN_IUNIT = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千"};    private AmountTransformUtils() {        throw new IllegalStateException("Utility class");    }    /**     *  转换为大写的中文金额,支持负数     * @param amount 金额     * @param isSimplified 是否简体中文:true:简体,false:繁体     * @return     */    public static String toChinese(String amount, boolean isSimplified) {        // 判断输入的金额字符串是否符合要求        if (StringUtils.isBlank(amount) || !amount.matches("(-)?[\d]*(.)?[\d]*")) {            throw new RuntimeException("请输入数字");        }        if ("0".equals(amount) || "0.00".equals(amount) || "0.0".equals(amount)) {            return isSimplified ? "零" : "零元";        }        // 判断金额数字中是否存在负号"-"        boolean flag = false;        if (amount.startsWith("-")) {            // 标志位,标志此金额数字为负数            flag = true;            amount = amount.replaceAll("-", "");        }        // 去掉金额数字中的逗号","        amount = amount.replaceAll(",", "");        // 初始化:分离整数部分和小数部分        String[] separateNum = separateNum(amount);        // 整数部分数字        String integerStr = separateNum[0];        // 小数部分数字        String decimalStr = separateNum[1];        // beyond超出计算能力,直接返回        if (integerStr.length() > IUNIT.length) {            throw new RuntimeException("输入数字超限");        }        // 整数部分数字        int[] integers = toIntArray(integerStr);        // 判断整数部分是否存在输入012的情况        if (integers.length > 1 && integers[0] == 0) {            throw new RuntimeException("输入数字不符合要求");        }        // 设置万单位        boolean isWan = isWan5(integerStr);        // 小数部分数字        int[] decimals = toIntArray(decimalStr);        // 返回最终的大写金额        String result = "";        String chineseInteger = getChineseInteger(integers, isWan, isSimplified);        String chineseDecimal = getChineseDecimal(decimals, isSimplified);        if (decimals.length > 0 && isSimplified) {            result = chineseInteger;            if (!chineseDecimal.equals("零零")) {                result = result + "点" + chineseDecimal;            }        } else {            result = chineseInteger + chineseDecimal;        }        if (flag) {            // 如果是负数,加上"负"            return "负" + result;        } else {            return result;        }    }    /**     * 分离整数部分和小数部分     * @param str     * @return     */    private static String[] separateNum(String str) {        String integerStr;// 整数部分数字        String decimalStr;// 小数部分数字        if (str.indexOf('.') >= 1) {            integerStr = str.substring(0, str.indexOf('.'));            decimalStr = str.substring(str.indexOf('.') + 1);            if (decimalStr.length() > 2) {                decimalStr = decimalStr.substring(0, 2);            }        } else if (str.indexOf('.') == 0) {            integerStr = "";            decimalStr = str.substring(1);        } else {            integerStr = str;            decimalStr = "";        }        return new String[] {integerStr, decimalStr};    }    /**     *  将字符串转为int数组     * @param number  数字     * @return     */    private static int[] toIntArray(String number) {        int[] array = new int[number.length()];        for (int i = 0; i  1 && integers[i + 1] != 0) {                    key += NUMBERS[0];                }            }            chineseInteger.append(integers[i] == 0 ? key : (NUMBERS[integers[i]] + IUNIT[length - i - 1]));        }        return chineseInteger.toString();    }    /**     * 简体中文整数     * @param integers     * @param isWan     * @return     */    private static String simplifiedChineseInteger(int[] integers, boolean isWan) {        StringBuilder chineseInteger = new StringBuilder("");        int length = integers.length;        for (int i = 0; i  1 && integers[i + 1] != 0) {                    key += CN_NUMBERS[0];                }                if (length == 1 && integers[i] == 0) {                    key += CN_NUMBERS[0];                }            }            chineseInteger.append(integers[i] == 0 ? key : (CN_NUMBERS[integers[i]] + CN_IUNIT[length - i - 1]));        }        return chineseInteger.toString();    }    /**     *  将小数部分转为大写的金额     * @param decimals 小数部分的数字     * @return     */    private static String getChineseDecimal(int[] decimals, boolean isSimplified) {        StringBuilder chineseDecimal = new StringBuilder("");        if (!isSimplified) {            for (int i = 0; i  1 && decimals[i + 1] != 0) {                    key += NUMBERS[0];                }                chineseDecimal.append(decimals[i] == 0 ? key : (NUMBERS[decimals[i]] + DUNIT[i]));            }        } else {            for (int i = 0; i  4) {            String subInteger = "";            if (length > 8) {                subInteger = integerStr.substring(length - 8, length - 4);            } else {                subInteger = integerStr.substring(0, length - 4);            }            return Integer.parseInt(subInteger) > 0;        } else {            return false;        }    }    public static void main(String[] args) {        String amount = "123456789012.123";        System.out.println(amount + ":" + AmountTransformUtils.toChinese(amount, true));        amount = "0.123";        System.out.println(amount + ":" + AmountTransformUtils.toChinese(amount, true));        amount = "0";        System.out.println(amount + ":" + AmountTransformUtils.toChinese(amount, true));        amount = "-1123456789.123";        System.out.println(amount + ":" + AmountTransformUtils.toChinese(amount, true));        amount = "120001.01";        System.out.println(amount + ":" + AmountTransformUtils.toChinese(amount, true));        amount = "120001.00";        System.out.println(amount + ":" + AmountTransformUtils.toChinese(amount, true));        System.out.println("=================");        System.out.println(amount + ":" + AmountTransformUtils.toChinese(amount, false));        amount = "0.123";        System.out.println(amount + ":" + AmountTransformUtils.toChinese(amount, false));        amount = "0";        System.out.println(amount + ":" + AmountTransformUtils.toChinese(amount, false));        amount = "-1123456789.123";        System.out.println(amount + ":" + AmountTransformUtils.toChinese(amount, false));        amount = "120001.01";        System.out.println(amount + ":" + AmountTransformUtils.toChinese(amount, false));        amount = "120001.00";        System.out.println(amount + ":" + AmountTransformUtils.toChinese(amount, false));    }}

测试结果:

()
123456789012.123:一千二百三十四亿五千六百七十八万九千零一十二点一二0.123:零点一二0:零-1123456789.123:负一十一亿二千三百四十五万六千七百八十九点一二120001.01:一十二万零一点零一120001.00:一十二万零一=================120001.00:壹拾贰万零壹元0.123:壹角贰分0:零元-1123456789.123:负壹拾壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元壹角贰分120001.01:壹拾贰万零壹元零壹分120001.00:壹拾贰万零壹元Process finished with exit code 0

上一篇:织梦网站标识更换教程,轻松定制,彰显个性!

下一篇:OPS模块深度解析,功能、作用与关键重要性