【改進版】【阿拉伯數字轉英文大寫】Java實現

比之前版本更加精簡

Money.java

package com.zx.simple;

import java.util.concurrent.Delayed;

/**
 * @author 作者
 * @version 創建時間:2019年10月19日 上午10:21:42
 * @email [email protected] 類說明
 */
public class Util {

	static String dealThree(int num) {// 處理三位數103
		StringBuffer sb = new StringBuffer();
		if (num == 0) {// 全爲零
			return "";
		}
		if (num / 100 == 0) {// 首位爲零
			sb.append(" and ");
			if (num % 100 <= 20 || num % 10 == 0) {// 如果該數爲1-20間的數或者爲幾十的數
				sb.append(getUp(num));
			} else {//
				int num1 = (num % 100) - (num % 10);
				sb.append(getUp(num1));
				sb.append("-");
				sb.append(getUp(num % 10));
			}
		} else {// 120,h=1
			int h = num / 100;
			sb.append(getUp(h) + " hundred ");
			int cache = (num % 100) / 10;// 判斷中間的數是否爲零
			if (cache == 0) {// 如果爲零
				if (num % 100 == 0) {// 整百
					sb.append(getUp(num % 100));
				} else {// 非整百
					sb.append(" and ");
					sb.append(getUp(num % 10));
				}
			} else {
				if (num % 100 <= 20 || num % 10 == 0) {// 如果該數爲1-20間的數或者爲幾十的數 num == 120
					sb.append(" and ");
					sb.append(getUp(num % 100));
				} else {
					cache = (num % 100) - (num % 10);// 得到80
					sb.append(" and ");
					sb.append(getUp(cache));
					sb.append("-");
					sb.append(getUp(num % 10));
				}
			}
		}
		return sb.toString();
	}

	public static String billion(String str) {// 123456789000
		StringBuffer sb = new StringBuffer();
		int cache = 0;
		int last = 0;
		if (str.length() == 10) {
			cache = str.charAt(0) + 0;
			last = Integer.parseInt(str.substring(1, 10));
		} else if (str.length() == 11) {
			cache = Integer.parseInt(str.substring(0, 2));
			last = Integer.parseInt(str.substring(2, 11));
		} else if (str.length() == 12) {
			cache = Integer.parseInt(str.substring(0, 3));
			last = Integer.parseInt(str.substring(3, 12));
		}
		sb.append(dealThree(cache)).append(" billion ");
		sb.append(million(last));
		return sb.toString();
	}

	public static String million(int num) {
		StringBuffer sb = new StringBuffer();
		sb.append(dealThree(num / 1000000));
		if (num / 100000 != 0) {
			sb.append(" million ");
		}

		sb.append(thousand(num % 1000000));
		return sb.toString();
	}

	public static String thousand(int num) {
		StringBuffer sb = new StringBuffer();
		sb.append(dealThree(num / 1000));
		if (num / 1000 != 0) {
			sb.append(" thousand ");
		}
		sb.append(one(num % 1000));
		return sb.toString();
	}

	public static StringBuffer hundred(int num) {
		return null;
	}

	public static String one(int num) {
		StringBuffer sb = new StringBuffer();
		sb.append(Util.dealThree(num));
		return sb.toString();
	}

	public static String getUp(int num) {
		String str = "";
		switch (num) {
		case 1:
			str = "ONE";
			break;
		case 2:
			str = "TWO";
			break;
		case 3:
			str = "THREE";
			break;
		case 4:
			str = "FOUR";
			break;
		case 5:
			str = "FIVE";
			break;
		case 6:
			str = "SIX";
			break;
		case 7:
			str = "SEVEN";
			break;
		case 8:
			str = "EIGHT";
			break;
		case 9:
			str = "NINE";
			break;
		case 10:
			str = "TEN";
			break;
		case 11:
			str = "ELEVN";
			break;
		case 12:
			str = "TWELVE";
			break;
		case 13:
			str = "THIRTEEN";
			break;
		case 14:
			str = "FOURTEEN";
			break;
		case 15:
			str = "FIFTEEN";
			break;
		case 16:
			str = "SIXTEEN";
			break;
		case 17:
			str = "SEVENTEEN";
			break;
		case 18:
			str = "EIGHTEEN";
			break;
		case 19:
			str = "NINETEEN";
			break;
		case 20:
			str = "TWENTY";
			break;
		case 30:
			str = "THIRTY";
			break;
		case 40:
			str = "FORTY";
			break;
		case 50:
			str = "FIFTY";
			break;
		case 60:
			str = "SIXTY";
			break;
		case 70:
			str = "SEVENTY";
			break;
		case 80:
			str = "EIGHTY";
			break;
		case 90:
			str = "NINETY";
			break;
		default:
			break;
		}
		return str;
	}
}

Util.java

package com.zx.simple;

import java.util.concurrent.Delayed;

/**
 * @author 作者
 * @version 創建時間:2019年10月19日 上午10:21:42
 * @email [email protected] 類說明
 */
public class Util {

	static String dealThree(int num) {// 處理三位數103
		StringBuffer sb = new StringBuffer();
		if (num == 0) {// 全爲零
			return "";
		}
		if (num / 100 == 0) {// 首位爲零
			sb.append(" and ");
			if (num % 100 <= 20 || num % 10 == 0) {// 如果該數爲1-20間的數或者爲幾十的數
				sb.append(getUp(num));
			} else {//
				int num1 = (num % 100) - (num % 10);
				sb.append(getUp(num1));
				sb.append("-");
				sb.append(getUp(num % 10));
			}
		} else {// 120,h=1
			int h = num / 100;
			sb.append(getUp(h) + " hundred ");
			int cache = (num % 100) / 10;// 判斷中間的數是否爲零
			if (cache == 0) {// 如果爲零
				if (num % 100 == 0) {// 整百
					sb.append(getUp(num % 100));
				} else {// 非整百
					sb.append(" and ");
					sb.append(getUp(num % 10));
				}
			} else {
				if (num % 100 <= 20 || num % 10 == 0) {// 如果該數爲1-20間的數或者爲幾十的數 num == 120
					sb.append(" and ");
					sb.append(getUp(num % 100));
				} else {
					cache = (num % 100) - (num % 10);// 得到80
					sb.append(" and ");
					sb.append(getUp(cache));
					sb.append("-");
					sb.append(getUp(num % 10));
				}
			}
		}
		return sb.toString();
	}

	public static String billion(String str) {// 123456789000
		StringBuffer sb = new StringBuffer();
		int cache = 0;
		int last = 0;
		if (str.length() == 10) {
			cache = str.charAt(0) + 0;
			last = Integer.parseInt(str.substring(1, 10));
		} else if (str.length() == 11) {
			cache = Integer.parseInt(str.substring(0, 2));
			last = Integer.parseInt(str.substring(2, 11));
		} else if (str.length() == 12) {
			cache = Integer.parseInt(str.substring(0, 3));
			last = Integer.parseInt(str.substring(3, 12));
		}
		sb.append(dealThree(cache)).append(" billion ");
		sb.append(million(last));
		return sb.toString();
	}

	public static String million(int num) {
		StringBuffer sb = new StringBuffer();
		sb.append(dealThree(num / 1000000));
		if (num / 100000 != 0) {
			sb.append(" million ");
		}

		sb.append(thousand(num % 1000000));
		return sb.toString();
	}

	public static String thousand(int num) {
		StringBuffer sb = new StringBuffer();
		sb.append(dealThree(num / 1000));
		if (num / 1000 != 0) {
			sb.append(" thousand ");
		}
		sb.append(one(num % 1000));
		return sb.toString();
	}

	public static StringBuffer hundred(int num) {
		return null;
	}

	public static String one(int num) {
		StringBuffer sb = new StringBuffer();
		sb.append(Util.dealThree(num));
		return sb.toString();
	}

	public static String getUp(int num) {
		String str = "";
		switch (num) {
		case 1:
			str = "ONE";
			break;
		case 2:
			str = "TWO";
			break;
		case 3:
			str = "THREE";
			break;
		case 4:
			str = "FOUR";
			break;
		case 5:
			str = "FIVE";
			break;
		case 6:
			str = "SIX";
			break;
		case 7:
			str = "SEVEN";
			break;
		case 8:
			str = "EIGHT";
			break;
		case 9:
			str = "NINE";
			break;
		case 10:
			str = "TEN";
			break;
		case 11:
			str = "ELEVN";
			break;
		case 12:
			str = "TWELVE";
			break;
		case 13:
			str = "THIRTEEN";
			break;
		case 14:
			str = "FOURTEEN";
			break;
		case 15:
			str = "FIFTEEN";
			break;
		case 16:
			str = "SIXTEEN";
			break;
		case 17:
			str = "SEVENTEEN";
			break;
		case 18:
			str = "EIGHTEEN";
			break;
		case 19:
			str = "NINETEEN";
			break;
		case 20:
			str = "TWENTY";
			break;
		case 30:
			str = "THIRTY";
			break;
		case 40:
			str = "FORTY";
			break;
		case 50:
			str = "FIFTY";
			break;
		case 60:
			str = "SIXTY";
			break;
		case 70:
			str = "SEVENTY";
			break;
		case 80:
			str = "EIGHTY";
			break;
		case 90:
			str = "NINETY";
			break;
		default:
			break;
		}
		return str;
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章