人民币金额大写

在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序。  本题的任务是:从键盘输入一个十亿以内的正整数(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));
			else
				list.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++) {
			// 如果当前数字不为0
			if ((number.charAt(i) - '0') != 0) {
				String temp1 = "";
				// number为两位数并且number的十位必须是1
				if (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;
				// 遇到非零数字重置为0
				zeroCount = 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值