黑马程序员技术交流社区
标题:
今天碰到的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