人民币金额大写

来源:互联网 发布:财经日历数据接口 编辑:程序博客网 时间:2024/04/28 01:22
在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序。  本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误的情况)。 
比如,用户输入:35201,程序输出:叁万伍仟贰佰零壹  用户输入:30201,程序输出:叁万零贰佰零壹  用户输入:30001,程序输出:叁万零壹  用户输入:31000,程序输出:叁万壹仟 
用户输入:120023201,程序输出:壹亿贰仟零贰万叁仟贰佰零壹  用户输入:120020001,程序输出:壹亿贰仟零贰万零壹  用户输入:100000001,程序输出:壹亿零壹 

可以看到,在万后满千位,则不加零,否则要补零,但不要出现类似“零零”的情况。  在亿后满千万位,则不加零,否则要补零,但整个“万档”没有数字时,“万”字省去。

package MyTest;import java.util.ArrayList;import java.util.List;import java.util.Stack;public class MyTest {public static void main(String[] args) throws Exception {String[] multipleText = { "", "万", "亿" };String number = "121000";int length = number.length();List<String> list=new ArrayList<String>();while (length > 0) {if (length <= 4)list.add(number.substring(0, length));elselist.add(number.substring(length - 4, length));length -= 4;}Stack<String> stack=new Stack<String>();for (int i = 0; i < list.size(); i++) {String temp=NumberToChinese(list.get(i));if(!"".equals(temp))stack.push(temp+multipleText[i]);}while(!stack.isEmpty()){System.out.print(stack.pop());}}/** * @param number *            数字字符串 * @return 汉字字符串 */public static String NumberToChinese(String number) {// 用于统计0个数int zeroCount = 0;//String[] numberText = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };String[] numberText = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };String[] multipleText = { "仟", "佰", "拾", "" };int digitNumber = number.length();String temp = "";for (int i = 0; i < digitNumber; i++) {// 如果当前数字不为0if ((number.charAt(i) - '0') != 0) {String temp1 = "";// number为两位数并且number的十位必须是1if (digitNumber == 2 && (number.charAt(i) - '0') == 1) {if (i == 1)temp1 = numberText[(number.charAt(i) - '0')];} else {// 将数字转换为汉字temp1 = numberText[(number.charAt(i) - '0')];}// 获取当前汉字的倍数String temp2 = multipleText[(multipleText.length - digitNumber) + i];// 将汉字数字与倍数合并temp += temp1 + temp2;// 遇到非零数字重置为0zeroCount = 0;} else {// 遇到零数字则统计if (zeroCount == 0) {temp += "零";zeroCount++;}}}// digitNumber!=1表示总长度为1位就不给删除if (zeroCount != 0 && digitNumber != 1) {// 如果最后末尾有零,则将汉字零删除return temp.substring(0, temp.lastIndexOf("零"));} else {return temp;}}}


0 0
原创粉丝点击