Java 数字金额转大写(网上找的都不太合适,试试这个!)

上代码:

package cn.net.cdsz.ccb.test;

public class NumbersToUppercaseUtil {

    private static final double MAXIMUM_NUMBER = 99999999999.99; // 最大支持的金额
    private static final String CN_ZERO = "零"; // 中文数字零
    private static final String CN_ONE = "壹"; // 中文数字壹
    private static final String CN_TWO = "贰"; // 中文数字贰
    private static final String CN_THREE = "叁"; // 中文数字叁
    private static final String CN_FOUR = "肆"; // 中文数字肆
    private static final String CN_FIVE = "伍"; // 中文数字伍
    private static final String CN_SIX = "陆"; // 中文数字陆
    private static final String CN_SEVEN = "柒"; // 中文数字柒
    private static final String CN_EIGHT = "捌"; // 中文数字捌
    private static final String CN_NINE = "玖"; // 中文数字玖
    private static final String CN_TEN = "拾"; // 十
    private static final String CN_HUNDRED = "佰"; // 百
    private static final String CN_THOUSAND = "仟"; // 千
    private static final String CN_TEN_THOUSAND = "万"; // 万
    private static final String CN_HUNDRED_MILLION = "亿"; // 亿
    private static final String CN_SYMBOL = ""; // 货币符号(如人民币符号)
    private static final String CN_DOLLAR = "元"; // 元
    private static final String CN_TEN_CENT = "角"; // 角
    private static final String CN_CENT = "分"; // 分
    private static final String CN_INTEGER = "整"; // 整

    public static String convertCurrency(double currencyDigits) {

        if (currencyDigits < 0 || currencyDigits > MAXIMUM_NUMBER) {
            return "输入无效"; // 输入金额无效
        }

        long integral = (long) currencyDigits; // 获取整数部分
        int decimalPart = (int) ((currencyDigits - integral) * 100); // 获取小数部分(以分为单位)

        StringBuilder outputCharacters = new StringBuilder(); // 存储最终的中文金额字符
        String integralStr = String.valueOf(integral); // 将整数部分转换为字符串
        int integralLength = integralStr.length(); // 获取整数部分的长度
        boolean zeroCount = false; // 记录连续的零位
        int zeroCounter = 0; // 连续零位的个数

        for (int i = 0; i < integralLength; i++) {
            int position = integralLength - i - 1; // 数字的位置(从右到左,个位为0,十位为1,依此类推)
            char digitChar = integralStr.charAt(i); // 获取当前位置的数字字符
            int digit = Character.getNumericValue(digitChar); // 将字符转换为数字
            int quotient = position / 4; // 计算位置所在的千、万、亿位
            int modulus = position % 4; // 计算位置所在的位数

            if (digit == 0) {
                zeroCounter++;
            } else {
                if (zeroCounter > 0) {
                    outputCharacters.append(CN_ZERO); // 连续零位
                }
                zeroCounter = 0;
                outputCharacters.append(digits[digit]).append(radices[modulus]);
            }

            if (modulus == 0 && zeroCounter < 4) {
                outputCharacters.append(bigRadices[quotient]); // 插入千、万、亿位
            }
        }

        outputCharacters.append(CN_DOLLAR); // 添加元

        if (decimalPart > 0) {
            String decimalStr = String.valueOf(decimalPart); // 将小数部分转换为字符串
            int decimalLength = decimalStr.length(); // 获取小数部分的长度

            for (int i = 0; i < decimalLength; i++) {
                char digitChar = decimalStr.charAt(i); // 获取当前位置的数字字符
                int digit = Character.getNumericValue(digitChar); // 将字符转换为数字

                if (digit == 0) {
                    outputCharacters.append(CN_ZERO); // 连续零位
                } else {
                    outputCharacters.append(digits[digit]).append(decimals[i]);
                }
            }
        } else {
            outputCharacters.append(CN_INTEGER); // 添加整
        }

        return CN_SYMBOL + outputCharacters.toString(); // 返回最终的中文金额
    }

    public static void main(String[] args) {
        double currency = 10010001000.00; // 替换成您的数字金额
        String chineseAmount = convertCurrency(currency);
        System.out.println("大写人民币金额:" + chineseAmount);
    }

    private static final String[] digits = {
            CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, CN_NINE
    };

    private static final String[] radices = {
            "", CN_TEN, CN_HUNDRED, CN_THOUSAND
    };

    private static final String[] bigRadices = {
            "", CN_TEN_THOUSAND, CN_HUNDRED_MILLION
    };

    private static final String[] decimals = {
            CN_TEN_CENT, CN_CENT
    };
}

效果:

10010001000.00  输出===》大写人民币金额:壹佰亿零壹仟万零壹仟元整
1234356         输出===》大写人民币金额:壹佰贰拾叁万肆仟叁佰伍拾陆元整
5607800.06      输出===》大写人民币金额:伍佰陆拾万零柒仟捌佰元伍角
56768.26        输出===》大写人民币金额:伍万陆仟柒佰陆拾捌元贰角陆分

你可能感兴趣的:(日常代码,java,算法,数据结构)