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ù)需求適當(dāng)追加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)文章
RestTemplate使用不當(dāng)引發(fā)的問題及解決
這篇文章主要介紹了RestTemplate使用不當(dāng)引發(fā)的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
SQLSyntaxErrorException-ExecutorException報錯解決分析
這篇文章主要為大家介紹了SQLSyntaxErrorException-ExecutorException報錯解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
Java 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

