Java工具类(一) 财务金额小写数字转换中文大写工具类

代码

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

//金额大写功能转换
public static String change(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;
}

测试

public static void main(String[] args) {
	System.out.println(digitUppercase(987654320.01));
}

结果

玖亿捌千柒佰陆拾伍万肆千叁佰贰拾元零壹分
posted @ 2020-12-18 16:19  zklymm  阅读(390)  评论(0编辑  收藏  举报