人民币工具类

1、数字转换为人民币大写

2、字符串转换为人民币大写

public class RMButil {
    static String[] HanDigiStr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    static String[] HanDiviStr = {"", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟"};

    /**
     * 数字转换为大写字符串
     *
     * @param val 待转换的 double数字
     * @return String 大写数字
     */
    public static String numToRMBStr(double val) {
        String SignStr = "";
        String TailStr = "";
        if (val < 0.0D) {
            val = -val;
            SignStr = "负";
        }
        if ((val > 100000000000000.0D) || (val < -100000000000000.0D)) {
            return "数值位数过大!";
        }
        long temp = Math.round(val * 100.0D);
        long integer = temp / 100L;
        long fraction = temp % 100L;
        int jiao = (int) fraction / 10;
        int fen = (int) fraction % 10;
        if ((jiao == 0) && (fen == 0)) {
            TailStr = "整";
        } else {
            TailStr = HanDigiStr[jiao];
            if (jiao != 0) {
                TailStr = TailStr + "角";
            }
            if ((integer == 0L) && (jiao == 0)) {
                TailStr = "";
            }
            if (fen != 0) {
                TailStr = TailStr + HanDigiStr[fen] + "分";
            }
        }
        return SignStr + PositiveIntegerToHanStr(String.valueOf(integer)) + "元" + TailStr;
    }

    /**
     * 将字符串数字转换为大写
     *
     * @param digitStr 需要进行转换的数字
     * @return 转换后的大写
     */
    public static String digitToString(String digitStr) {
        String[] digit = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        String[] weight = {"", "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"};
        StringBuilder retDigit = new StringBuilder();
        String zs;
        String xs = "";
        int dot = digitStr.indexOf(".");
        if (dot > 0) {
            zs = digitStr.substring(0, dot);
            xs = digitStr.substring(dot + 1);
        } else
            zs = digitStr;
        int w;
        boolean flag = false;
        for (int i = 0; i < zs.length(); i++) {
            w = Integer.parseInt(zs.substring(i, i + 1));
            if (w == 0) {
                if (zs.length() - i == 5) {
                    retDigit.append("万");
                }
                if (zs.length() - i == 9) {
                    retDigit.append("亿");
                }
                flag = true;
            } else {
                if (flag) {
                    retDigit.append("零");
                    flag = false;
                }
                retDigit.append(digit[w]);
                retDigit.append(weight[(zs.length() - i)]);
            }
        }
        if (dot > 0) {
            retDigit.append("点");
            for (int i = 0; i < xs.length(); i++) {
                w = Integer.parseInt(xs.substring(i, i + 1));
                retDigit.append(digit[w]);
            }
        }
        return retDigit.toString();
    }

    private static String PositiveIntegerToHanStr(String NumStr) {
        String RMBStr = "";
        boolean lastzero = false;
        boolean hasvalue = false;

        int len = NumStr.length();
        if (len > 15) {
            return "数值过大!";
        }
        for (int i = len - 1; i >= 0; i--) {
            if (NumStr.charAt(len - i - 1) != ' ') {
                int n = NumStr.charAt(len - i - 1) - '0';
                if ((n < 0) || (n > 9)) {
                    return "输入含非数字字符!";
                }
                if (n != 0) {
                    if (lastzero) {
                        RMBStr = RMBStr + HanDigiStr[0];
                    }
                    if ((n != 1) || (i % 4 != 1) || (i != len - 1)) {
                        RMBStr = RMBStr + HanDigiStr[n];
                    }
                    RMBStr = RMBStr + HanDiviStr[i];
                    hasvalue = true;
                } else if ((i % 8 == 0) || ((i % 8 == 4) && (hasvalue))) {
                    RMBStr = RMBStr + HanDiviStr[i];
                }
                if (i % 8 == 0) {
                    hasvalue = false;
                }
                lastzero = (n == 0) && (i % 4 != 0);
            }
        }
        if (RMBStr.length() == 0) {
            return HanDigiStr[0];
        }
        return RMBStr;
    }

    public static void main(String[] args) {
        System.out.println("1.数字转换为人民币大写:" + numToRMBStr(818));
        System.out.println("2.字符串转换为人民币大写:" + digitToString("123456789012.45"));

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值