本文實例講述了Java實現數字轉成英文的方法。分享給大家供大家參考。具體分析如下:
英文數詞,按3位3位區分
Hundred: 100Thousand:1,000Million: 1,000,000Billion: 1,000,000,000Trillion: 1,000,000,000,000Quintillion: 1,000,000,000,000,000,000Sextillion: 1,000,000,000,000,000,000,000Nonillion: 1,000,000,000,000,000,000,000,000,000,000Centillion: 1 followed by 303 zeros
所以把數字字符串按3位分割,分別解析
public class NumUtil { public static final String[] enNum = { // 基本數詞表"zero", "one", "tow", "three", "four", "five", "six", "seven" , "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", " twenty", "", "", "", "", "", "", "", "", "", "thirty", "", "", "", "", "", " ", "", "", "", "fourty", "", "", "", "", "", "", "", "", "", "fifty", "", " ", "", "", "", "", "", "", "", "sixty", "", "", "", "", "", "", "", "" , "", "seventy", "", "", "", "", "", "", "", "", "", "eighty", "", "", "", "" , "", "", "", "", "", "ninety" }; public static final String[] enUnit = { "hundred", "thousand", "million", "billion", "trillion", "quintillion" }; // 單位表public static void main(String[] args) { System.out.println(analyze(1)); // 測試數據System.out.println(analyze(21)); System. out.println(analyze(105)); System.out.println(analyze(3250)); System.out.println(analyze(47826)); System.out.println(analyze(56945781)); } public static String analyze(long num) { // long型參數, return analyze(String.valueOf(num)); // 因為long型有極限,所以以字符串參數方法為主} public static String analyze(String num) { / / 數字字符串參數// 判斷字符串是否為數字if (!num.matches("//d+")) { return String.format("%s is not number", num); } num = num.replaceAll ("^[0]*([1-9]*)", "$1"); // 把字符串前面的0去掉if (num.length() == 0) { // 如果長度為0,則原串都是0 return enNum[0]; } else if (num.length() > 9) { // 如果大於9,即大於999999999,題目限制條件return "too big"; } // 按3位分割分組int count = (num.length() % 3 == 0) ? num.length() / 3 : num.length() / 3 + 1; if (count > enUnit.length) { return "too big" ; } // 判斷組單位是否超過, // 可以根據需求適當追加enUnit String[] group = new String[count]; for (int i = num.length(), j = group.length - 1; i > 0; i -= 3) { group[j--] = num.substring(Math.max(i - 3, 0), i); } StringBuilder buf = new StringBuilder(); // 結果保存for (int i = 0; i < count; i++) { // 遍歷分割的組int v = Integer.valueOf(group[i]); if (v >= 100) { // 因為按3位分割,所以這裡不會有超過999的數buf.append(enNum[v / 100]).append(" ").append(enUnit[0]) .append(" "); v = v % 100; // 獲取百位,並得到百位以後的數if (v != 0) { buf.append("and "); } // 如果百位後的數不為0,則追加and } if (v != 0) { // 前提是v不為0才作解析if (v < 20 || v % 10 == 0) { // 如果小於20或10的整數倍,直接取基本數詞表的單詞buf.append(enNum[v] ).append(" "); } else { // 否則取10位數詞,再取個位數詞buf.append(enNum[v - v % 10]).append(" "); buf.append( enNum[v % 10]).append(" "); } if (i != count - 1) { // 百位以上的組追加相應的單位buf.append(enUnit[count - 1 - i]). append(" "); } } } return buf.toString().trim(); // 返回值}}
希望本文所述對大家的java程序設計有所幫助。