[Java][工具方法]阿拉伯数字金额转成中文大写,精确到分

2023-11-25 563点热度 0人点赞 0条评论

如题,分享自用的阿拉伯数字金额转成中文大写,支持负数,单位元,小数支持2位数(角、分),网上摘录的,看到的比较靠谱的一个,

测试结果如下:

System.out.println(NumberToWords.convertToWords(-3.14)); // 负叁元壹角肆分
System.out.println(NumberToWords.convertToWords(10002)); // 壹万零贰元整

public class NumberToWords {
    private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分";
    private static final String DIGIT = "零壹贰叁肆伍陆柒捌玖";
    private static final double MAX_VALUE = 9999999999999.99D;

    //金额大写功能转换
    public static String convertToWords(double v) {

        String head = "";
        if (v < 0) {
            head = "负";
            v = Math.abs(v);
        }
        if (v > MAX_VALUE) {
            return "参数非法!";
        }
        long l = Math.round(v * 100);
        if (l == 0) {
            return "零元整";
        }
        String strValue = l + "";
        // i用来控制数
        int i = 0;
        // j用来控制单位
        int j = UNIT.length() - strValue.length();
        String rs = "";
        boolean isZero = false;
        for (; i < strValue.length(); i++, j++) {
            char ch = strValue.charAt(i);
            if (ch == '0') {
                isZero = true;
                if (UNIT.charAt(j) == '亿' || UNIT.charAt(j) == '万' || UNIT.charAt(j) == '元') {
                    rs = rs + UNIT.charAt(j);
                    isZero = false;
                }
            } else {
                if (isZero) {
                    rs = rs + "零";
                    isZero = false;
                }
                rs = rs + DIGIT.charAt(ch - '0') + UNIT.charAt(j);
            }
        }
        if (!rs.endsWith("分")) {
            rs = rs + "整";
        }
        rs = rs.replaceAll("亿万", "亿");
        return head + rs;
    }
}

Javascript的写法,详见:https://blog.terrynow.com/2021/09/24/javascript-money-number-to-chinese-capital/

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论