1. 程式人生 > >java實現將整數轉化為中文大寫金額

java實現將整數轉化為中文大寫金額

個人部落格站已經上線了,網址 www.llwjy.com ~歡迎各位吐槽~

-------------------------------------------------------------------------------------------------

問題描述:

      在日常生活中,我們經常會將阿拉伯數字轉化為中文大寫的情況:"零", "壹", "貳", "叄", "肆", "伍", "陸", "柒", "捌", "玖", "拾", "佰", "仟", "萬", "億",因此自己就編寫一個類,實現該功能的轉化。

實現過程:

      對於這個問題的實現,我們首先把數字按四位一個拆開(符合我們讀數字的習慣),然後對這四位數,做出他的讀法,具體程式碼如下:

	private static String getNumberStr1000 (int num) {
		if (num > 9999 || num < 0) {
			return "";
		}
		int q = num / 1000;
		int b = (num / 100) % 10;
		int s = (num / 10) % 10;
		int g = num % 10;
		StringBuffer sb = new StringBuffer();
		//千
		if (q > 0) {
			sb.append(NUMBER1[q]);
			sb.append(NUMBER2[3]);
		}
		//百
		if (b > 0) {
			sb.append(NUMBER1[b]);
			sb.append(NUMBER2[2]);
		} else {
			if (q != 0) {
				sb.append(NUMBER2[0]);
			}
		}
		//十
		if (s > 0) {
			sb.append(NUMBER1[s]);
			sb.append(NUMBER2[1]);
		} else {
			if (b != 0) {
				sb.append(NUMBER2[0]);
			}
		}
		//個
		if (g > 0) {
			sb.append(NUMBER1[g]);
		} 
		return sb.toString();
	}

      下面我們只需要在編寫一個方法,實現每個四位數的讀法以及對應的單位即可,具體程式碼如下:
	public static String getNumberStr(int num) {
		if (num < 0) {
			return "";
		}
		if (num == 0) {
			return NUMBER1[0];
		}
		int split = 10000;
		int y = num / (split * split);
		int w = (num / split) % split;
		int g = num % split;
		StringBuffer sb = new StringBuffer();
		//億
		if (y > 0) {
			sb.append(getNumberStr1000(y));
			sb.append(NUMBER2[5]);
		}
		//萬
		if (w > 999) {
			sb.append(getNumberStr1000(w));
			sb.append(NUMBER2[4]);
		} else {
			if (w > 0) {
				if (y != 0) {
					sb.append(NUMBER2[0]);
				}
				sb.append(getNumberStr1000(w));
				sb.append(NUMBER2[4]);
			}
		}
		//萬以下
		if (g > 0) {
			if (w != 0) {
				if (g > 999) {
					sb.append(getNumberStr1000(g));
				} else {
					sb.append(NUMBER2[0]);
					sb.append(getNumberStr1000(g));
				}
				
			} else {
				if (y != 0) {
					sb.append(NUMBER2[0]);
				}
				sb.append(getNumberStr1000(g));
			}
		}
		return sb.toString();
	}
完整原始碼:
 /**  
 *@Description:     
 */ 
package com.lulei.util;  
  
public class NumberUtil {
	private static String[] NUMBER1 = {"零", "壹", "貳", "叄", "肆", "伍", "陸", "柒", "捌", "玖"};
	private static String[] NUMBER2 = {"零", "拾", "佰", "仟", "萬", "億"};
	
	/**
	 * @param num
	 * @return
	 * @Author:lulei  
	 * @Description:將數字轉化為大寫
	 */
	public static String getNumberStr(int num) {
		if (num < 0) {
			return "";
		}
		if (num == 0) {
			return NUMBER1[0];
		}
		int split = 10000;
		int y = num / (split * split);
		int w = (num / split) % split;
		int g = num % split;
		StringBuffer sb = new StringBuffer();
		//億
		if (y > 0) {
			sb.append(getNumberStr1000(y));
			sb.append(NUMBER2[5]);
		}
		//萬
		if (w > 999) {
			sb.append(getNumberStr1000(w));
			sb.append(NUMBER2[4]);
		} else {
			if (w > 0) {
				if (y != 0) {
					sb.append(NUMBER2[0]);
				}
				sb.append(getNumberStr1000(w));
				sb.append(NUMBER2[4]);
			}
		}
		//萬以下
		if (g > 0) {
			if (w != 0) {
				if (g > 999) {
					sb.append(getNumberStr1000(g));
				} else {
					sb.append(NUMBER2[0]);
					sb.append(getNumberStr1000(g));
				}
				
			} else {
				if (y != 0) {
					sb.append(NUMBER2[0]);
				}
				sb.append(getNumberStr1000(g));
			}
		}
		return sb.toString();
	}
	
	/**
	 * @param num
	 * @return
	 * @Author:lulei  
	 * @Description:對萬以下的數字進行大小寫轉化
	 */
	private static String getNumberStr1000 (int num) {
		if (num > 9999 || num < 0) {
			return "";
		}
		int q = num / 1000;
		int b = (num / 100) % 10;
		int s = (num / 10) % 10;
		int g = num % 10;
		StringBuffer sb = new StringBuffer();
		//千
		if (q > 0) {
			sb.append(NUMBER1[q]);
			sb.append(NUMBER2[3]);
		}
		//百
		if (b > 0) {
			sb.append(NUMBER1[b]);
			sb.append(NUMBER2[2]);
		} else {
			if (q != 0) {
				sb.append(NUMBER2[0]);
			}
		}
		//十
		if (s > 0) {
			sb.append(NUMBER1[s]);
			sb.append(NUMBER2[1]);
		} else {
			if (b != 0) {
				sb.append(NUMBER2[0]);
			}
		}
		//個
		if (g > 0) {
			sb.append(NUMBER1[g]);
		} 
		return sb.toString();
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub  
		int i = 1;
		System.out.println(i + "--" + NumberUtil.getNumberStr(i));
		i = 1001;
		System.out.println(i + "--" + NumberUtil.getNumberStr(i));
		i = 100101;
		System.out.println(i + "--" + NumberUtil.getNumberStr(i));
		i = 10100101;
		System.out.println(i + "--" + NumberUtil.getNumberStr(i));
		i = 1234567890;
		System.out.println(i + "--" + NumberUtil.getNumberStr(i));
	}

}

測試執行結果:

-------------------------------------------------------------------------------------------------
小福利
-------------------------------------------------------------------------------------------------
      個人在極客學院上《Lucene案例開發》課程已經上線了(目前上線到第二課),歡迎大家吐槽~

第五課:小說網站的採集