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

How can I convert numbers to words in Java?

Susan Sarandon
Release: 2024-12-21 18:39:17
Original
965 people have browsed it

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

Usage:

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

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template