A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 系统管理员 于 2013-3-26 09:44 编辑

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

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-26 07:09

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

倒序浏览

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;
    }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
不错不错,学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马