Java實現(xiàn)數(shù)字轉(zhuǎn)成英文的方法
更新時間:2015年05月27日 15:56:18 作者:csdn_2013
這篇文章主要介紹了Java實現(xiàn)數(shù)字轉(zhuǎn)成英文的方法,涉及java數(shù)組與字符串的相關(guān)操作技巧,需要的朋友可以參考下
本文實例講述了Java實現(xiàn)數(shù)字轉(zhuǎn)成英文的方法。分享給大家供大家參考。具體分析如下:
英文數(shù)詞,按3位3位區(qū)分
Hundred: 100 Thousand:1,000 Million: 1,000,000 Billion: 1,000,000,000 Trillion: 1,000,000,000,000 Quintillion: 1,000,000,000,000,000,000 Sextillion: 1,000,000,000,000,000,000,000 Nonillion: 1,000,000,000,000,000,000,000,000,000,000 Centillion: 1 followed by 303 zeros
所以把數(shù)字字符串按3位分割,分別解析
public class NumUtil { public static final String[] enNum = { // 基本數(shù)詞表 "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)); // 測試數(shù)據(jù) 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型參數(shù), return analyze(String.valueOf(num)); // 因為long型有極限,所以以字符串參數(shù)方法為主 } public static String analyze(String num) { // 數(shù)字字符串參數(shù) // 判斷字符串是否為數(shù)字 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"; } // 判斷組單位是否超過, // 可以根據(jù)需求適當追加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(); // 結(jié)果保存 for (int i = 0; i < count; i++) { // 遍歷分割的組 int v = Integer.valueOf(group[i]); if (v >= 100) { // 因為按3位分割,所以這里不會有超過999的數(shù) buf.append(enNum[v / 100]).append(" ").append(enUnit[0]) .append(" "); v = v % 100; // 獲取百位,并得到百位以后的數(shù) if (v != 0) { buf.append("and "); } // 如果百位后的數(shù)不為0,則追加and } if (v != 0) { // 前提是v不為0才作解析 if (v < 20 || v % 10 == 0) { // 如果小于20或10的整數(shù)倍,直接取基本數(shù)詞表的單詞 buf.append(enNum[v]).append(" "); } else { // 否則取10位數(shù)詞,再取個位數(shù)詞 buf.append(enNum[v - v % 10]).append(" "); buf.append(enNum[v % 10]).append(" "); } if (i != count - 1) { // 百位以上的組追加相應(yīng)的單位 buf.append(enUnit[count - 1 - i]).append(" "); } } } return buf.toString().trim(); // 返回值 } }
希望本文所述對大家的java程序設(shè)計有所幫助。
相關(guān)文章
SQLSyntaxErrorException-ExecutorException報錯解決分析
這篇文章主要為大家介紹了SQLSyntaxErrorException-ExecutorException報錯解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08Java ArrayList如何實現(xiàn)生成不重復(fù)隨機數(shù)
這篇文章主要介紹了Java ArrayList如何實現(xiàn)生成不重復(fù)隨機數(shù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09如何使用會話Cookie和Java實現(xiàn)JWT身份驗證
這篇文章主要介紹了如何使用會話Cookie和Java實現(xiàn)JWT身份驗證,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2021-03-03