Home >Java >javaTutorial >How can I convert numbers to words in Java?

How can I convert numbers to words in Java?

Susan Sarandon
Susan SarandonOriginal
2024-12-21 18:39:17901browse

How can I convert numbers to words in Java?

Converting Numbers to Words in Java

Introduction:

We often encounter scenarios where we need to convert numerical values into their corresponding word representations. In Java, there isn't a built-in function that directly performs this conversion. However, with a bit of custom code, we can develop a solution that caters to our requirements.

Custom Solution:

We can create a custom class that handles the conversion process. Let's break down the approach:

Step 1: Handling Small Numbers (0 to 99)

  • Create an array containing names for numbers from 0 to 19 (numNames).
  • To handle numbers like "twenty" and "thirty," create another array with tens' names (tensNames).

Step 2: Converting Two-Digit Numbers

  • Divide the number by 100 to get the hundreds digit (hundreds).
  • Modulus division by 100 gives us the remaining two digits (remainder).
  • Get the hundreds digit's name from numNames.
  • Use a loop to construct the word representation of the remaining two digits using numNames and tensNames.

Step 3: Converting Three-Digit Numbers

  • Repeat the process for three-digit numbers.
  • Divide by 1000 to get thousands (thousands), then perform modulus division to get the remaining three digits.
  • Append the thousands digit's name from numNames and "thousand" to the result.

Step 4: Converting Larger Numbers

  • Follow the same process for millions, billions, and so on.
  • Divide the number by the appropriate power of 10 to extract the corresponding digit count.
  • Modulus divide to get the remaining digits.
  • Append the correct magnitude (e.g., "million", "billion") to the result.

Example Code:

This code demonstrates the custom solution:

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", " ");
  }
}

Usage:

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

Conclusion:

With this custom solution, you can convert numerical values into their word representations easily and efficiently.

The above is the detailed content of How can I convert numbers to words in Java?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn