金额转换大写[java]

来源:互联网 发布:卖证券的网络销售 编辑:程序博客网 时间:2024/04/30 01:01

/**
     *  将小数形式的金额转换为大写形式
     *  @Enclosing_Method  : convertToChineseNumber
     *  @Written by        : wangjin
     *  @Creation Date     : Jun 25, 2010 10:42:36 AM
     *  @version           : v1.00
     *  @param number       :金额的数字形式
     *  @return               :String 金额的大写形式
     *  @throws Exception
     *
     */
    public  String convertToChineseNumber(Double number) throws Exception {
        StringBuffer chineseNumber = new StringBuffer();
        String[] num = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
        String[] unit = { "分", "角", "圆", "拾", "佰", "仟", "万", "拾", "佰", "仟",
                "亿", "拾", "佰", "仟", "万" };
        String tempNumber = String.valueOf(Math.round((number * 100)));
        int tempNumberLength = tempNumber.length();
        if ("0".equals(tempNumber)) {
            return "零圆整";
        }
        if (tempNumberLength > 15) {
            throw new Exception("超出转化范围.");
        }
        boolean preReadZero = true; // 前面的字符是否读零


        for (int i = tempNumberLength; i > 0; i--) {
            if ((tempNumberLength - i + 2) % 4 == 0) {
                // 如果在(圆,万,亿,万)位上的四个数都为零,如果标志为未读零,则只读零,如果标志为已读零,则略过这四位
                if (i - 4 >= 0 && "0000".equals(tempNumber.substring(i - 4, i))) {
                    if (!preReadZero) {
                        chineseNumber.insert(0, "零");
                        preReadZero = true;
                    }
                    i -= 3; // 下面还有一个i--
                    continue;
                }
                // 如果当前位在(圆,万,亿,万)位上,则设置标志为已读零(即重置读零标志)
                preReadZero = true;
            }
            Integer digit = Integer.parseInt(tempNumber.substring(i - 1, i));
            if (digit == 0) {
                // 如果当前位是零并且标志为未读零,则读零,并设置标志为已读零


                if (!preReadZero) {
                    chineseNumber.insert(0, "零");
                    preReadZero = true;
                }
                // 如果当前位是零并且在(圆,万,亿,万)位上,则读出(圆,万,亿,万)
                if ((tempNumberLength - i + 2) % 4 == 0) {
                    chineseNumber.insert(0, unit[tempNumberLength - i]);
                }
            }
            // 如果当前位不为零,则读出此位,并且设置标志为未读零


            else {
                chineseNumber
                        .insert(0, num[digit] + unit[tempNumberLength - i]);
                preReadZero = false;
            }
        }
        // 如果分角两位上的值都为零,则添加一个“整”字
        if (tempNumberLength - 2 >= 0
                && "00".equals(tempNumber.substring(tempNumberLength - 2,
                        tempNumberLength))) {
            chineseNumber.append("整");
        }
        return chineseNumber.toString();

    }