黑马程序员技术交流社区

标题: 今天碰到的java题(二)--人民币金额大写问题 [打印本页]

作者: 魏福伟    时间: 2013-3-25 22:47
标题: 今天碰到的java题(二)--人民币金额大写问题
本帖最后由 系统管理员 于 2013-3-26 09:44 编辑

人民币金额大写问题
  在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序。
  本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误的情况)。
  比如,用户输入:35201,程序输出:叁万伍仟贰佰零壹
  用户输入:30201,程序输出:叁万零贰佰零壹
  用户输入:30001,程序输出:叁万零壹
  用户输入:31000,程序输出:叁万壹仟
  用户输入:120023201,程序输出:壹亿贰仟零贰万叁仟贰佰零壹
  用户输入:120020001,程序输出:壹亿贰仟零贰万零壹
  用户输入:100000001,程序输出:壹亿零壹
  可以看到,在万后满千位,则不加零,否则要补零,但不要出现类似“零零”的情况。
  在亿后满千万位,则不加零,否则要补零,但整个“万档”没有数字时,“万”字省去。


作者: HM周一帆    时间: 2013-3-25 22:57

public class MoneyFormat {
   
    private StringBuffer sb = new StringBuffer();
    private String bigLetter[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌","玖" };
    private String unit[] = { "圆", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾","佰", "仟", "万" };

    /**
     * 转换金额为大写

     *
     * @param String 小写金额
     * @return String 大写金额
     * @author dryzeng

     */
    public String format(String inputMoney) {
        if (inputMoney.length() > 13) {
            sb.append("数字太大,无法显示!");
            return sb.toString();
        } else if (Double.valueOf(inputMoney) < 0) {
            sb.append("错误,金额为负数!");
            return sb.toString();
        } else if (Double.valueOf(inputMoney) == 0) {
            sb.append("零圆整");
            return sb.toString();
        }
        // 取得小数点前的数字

        String moneyf[] = String.valueOf(inputMoney).split("\\.")[0].split("");
        //金额转换
        for (int i = 1; i < moneyf.length; i++) {
            sb.append(bigLetter[Integer.valueOf(moneyf[i])]);
            sb.append(unit[moneyf.length - 1 - i]);
        }
        try {
            // 取得小数点后的数字
            String moneyb[] = String.valueOf(inputMoney).split("\\.")[1].split("");
            sb.append(bigLetter[Integer.valueOf(moneyb[1])]);
            sb.append("角");
        } catch (Exception e) {}
        //格式人性化
        String finalsb = sb.toString();
        finalsb = finalsb.replaceAll("零仟", "零");
        finalsb = finalsb.replaceAll("零佰", "零");
        finalsb = finalsb.replaceAll("零拾", "零");
        finalsb = finalsb.replaceAll("零亿", "亿");
        finalsb = finalsb.replaceAll("零万", "万");
        finalsb = finalsb.replaceAll("零零零", "零");
        finalsb = finalsb.replaceAll("零零", "零");
        finalsb = finalsb.replaceAll("零圆", "圆");
        finalsb = finalsb.replaceAll("亿万", "亿");
        finalsb = finalsb.replaceAll("零角", "");
        if ("圆".equals(finalsb.substring(0, 1))) {
            finalsb = "零" + finalsb;
        }
        return finalsb;
    }
}

作者: 李辉    时间: 2013-3-26 05:15
不错不错,学习学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2