人民幣金額大寫

在與財務相關的應用中,經常會用到人民幣金額的大寫,比如發票的打印程序。  本題的任務是:從鍵盤輸入一個十億以內的正整數(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;
		}
	}
}


發佈了65 篇原創文章 · 獲贊 39 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章