程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java完成數字轉成英文的辦法

Java完成數字轉成英文的辦法

編輯:關於JAVA

Java完成數字轉成英文的辦法。本站提示廣大學習愛好者:(Java完成數字轉成英文的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Java完成數字轉成英文的辦法正文


本文實例講述了Java完成數字轉成英文的辦法。分享給年夜家供年夜家參考。詳細剖析以下:

英文數詞,按3位3位辨別

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

所以把數字字符串按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法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved