首頁 >Java >java教程 >如何在 Java 中將數字轉換為單字?

如何在 Java 中將數字轉換為單字?

Susan Sarandon
Susan Sarandon原創
2024-12-21 18:39:17968瀏覽

How can I convert numbers to words in Java?

Java 中數字轉換為單字

簡介:

我們常常會遇到需要將數值轉換為單字的場景他們對應的單字表示。在 Java 中,沒有直接執行此轉換的內建函數。但是,透過一些自訂程式碼,我們可以開發一個滿足我們要求的解決方案。

自訂解決方案:

我們可以建立一個自訂類別來處理轉換過程。讓我們分解一下這個方法:

第 1 步:處理小數字(0 到 99)

  • 建立一個包含 0 到 19 數字名稱的陣列 (numNames)。
  • 要處理「二十」和「三十」這樣的數字,請建立另一個包含十個名稱的陣列(tensNames)。

第 2 步:轉換兩位數

  • 將數字除以 100,得到百位數。
  • 模數除以 100 得到剩下的兩位數(餘數)。
  • 從 numNames 中取得百位數字的名稱。
  • 使用迴圈使用 numNames 和tensNames 建構剩餘兩位數字的單字表示。

第三步:轉換三位數

  • 重複三位數的過程。
  • 除以 1000 得到千位(千),然後進行模除得到剩餘的三位數。
  • 附加 numNames 中的千位數名稱和 "千」到結果。

第 4 步:轉換更大數字

  • 對百萬、十億等遵循相同的過程。
  • 將數字除以適當的 10 次方以提取相應的位數。
  • 模除以得到剩餘的數字。
  • 附加正確的大小(例如,“百萬”, “billion”)到結果。

範例程式碼:

此程式碼示範了自訂解決方案:

import java.text.DecimalFormat;

public class EnglishNumberToWords {

  private static final String[] tensNames = {
    "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"
  };

  private static final String[] numNames = {
    "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
    "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen",
    "seventeen", "eighteen", "nineteen"
  };

  private EnglishNumberToWords() {}

  private static String convertLessThanOneThousand(int number) {
    // Handle numbers between 0 and 99
    String soFar;
    if (number % 100 < 20){
      soFar = numNames[number % 100];
      number /= 100;
    }
    else {
      soFar = numNames[number % 10];
      number /= 10;
      soFar = tensNames[number % 10] + soFar;
      number /= 10;
    }
    if (number == 0) return soFar;
    return numNames[number] + " hundred" + soFar;
  }

  public static String convert(long number) {
    if (number == 0) { return "zero"; }
    String snumber = Long.toString(number);
    String mask = "000000000000";
    DecimalFormat df = new DecimalFormat(mask);
    snumber = df.format(number);
    // Handle billions, millions, hundred thousands, and thousands separately
    int billions  = Integer.parseInt(snumber.substring(0,3));
    int millions  = Integer.parseInt(snumber.substring(3,6));
    int hundredThousands = Integer.parseInt(snumber.substring(6,9));
    int thousands = Integer.parseInt(snumber.substring(9,12));
    String tradBillions;
    switch (billions) {
    case 0:
      tradBillions = "";
      break;
    case 1 :
      tradBillions = convertLessThanOneThousand(billions) + " billion ";
      break;
    default :
      tradBillions = convertLessThanOneThousand(billions) + " billion ";
    }
    String result =  tradBillions;
    String tradMillions;
    switch (millions) {
    case 0:
      tradMillions = "";
      break;
    case 1 :
      tradMillions = convertLessThanOneThousand(millions) + " million ";
      break;
    default :
      tradMillions = convertLessThanOneThousand(millions) + " million ";
    }
    result =  result + tradMillions;
    String tradHundredThousands;
    switch (hundredThousands) {
    case 0:
      tradHundredThousands = "";
      break;
    case 1 :
      tradHundredThousands = "one thousand ";
      break;
    default :
      tradHundredThousands = convertLessThanOneThousand(hundredThousands) + " thousand ";
    }
    result =  result + tradHundredThousands;
    String tradThousand;
    tradThousand = convertLessThanOneThousand(thousands);
    result =  result + tradThousand;
    return result.replaceAll("^\s+", "").replaceAll("\b\s{2,}\b", " ");
  }
}

用法:

System.out.println(EnglishNumberToWords.convert(123456789));
// Output: "one hundred twenty three million four hundred fifty six thousand seven hundred eighty nine"

結論:

使用此自訂解決方案,您可以將數值轉換為輕鬆且有效率地表達他們的文字。

以上是如何在 Java 中將數字轉換為單字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn