Quantcast
Channel: Tech Tutorials
Viewing all articles
Browse latest Browse all 892

Converting Numbers to Words - Java Program

$
0
0

In this post we’ll see a Java program to convert numbers to words. For example, in the Java program if number 5467 is passed then the output should be- Five thousand four hundred and sixty seven.

Number systems

In Indian system numbers are called differently and even placement is different.

For example -

11,23,45,657- Eleven crore twenty three lakhs forty five thousand six hundred fifty seven

As you can see the numbers here are Crore, Lakhs also the digits are grouped in twos except the hundreds where three digits are grouped.

In international system same number will be written as-

112,345,657- One hundred twelve million three hundred forty five thousand six hundred fifty seven

Here you can notice that the digits are grouped in threes and the digit group separator (hundred, thousand, million...) is placed after every three digits.

We’ll have Java program for converting numbers to words for both Indian and international system.

Converting number to words in Java – International System

As already stated above, in the program we’ll have to get the three digits of the number in each iteration and put the correct place value after those three digits.

In the program we’ll also have different arrays for the numbers.


public class ConvertNumToWord {
private static final String[] units = {
"",
" one",
" two",
" three",
" four",
" five",
" six",
" seven",
" eight",
" nine"
};
private static final String[] twoDigits = {
" ten",
" eleven",
" twelve",
" thirteen",
" fourteen",
" fifteen",
" sixteen",
" seventeen",
" eighteen",
" nineteen"
};
private static final String[] tenMultiples = {
"",
"",
" twenty",
" thirty",
" forty",
" fifty",
" sixty",
" seventy",
" eighty",
" ninety"
};
private static final String[] placeValues = {
" ",
" thousand",
" million",
" billion",
" trillion"
};

private static String convertNumber(long number) {
String word = "";
int index = 0;
do {
// take 3 digits in each iteration
int num = (int)(number % 1000);
if (num != 0){
String str = ConversionForUptoThreeDigits(num);
word = str + placeValues[index] + word;
}
index++;
// next 3 digits
number = number/1000;
} while (number > 0);
return word;
}

private static String ConversionForUptoThreeDigits(int number) {
String word = "";
int num = number % 100;
if(num < 10){
word = word + units[num];
}
else if(num < 20){
word = word + twoDigits[num%10];
}else{
word = tenMultiples[num/10] + units[num%10];
}

word = (number/100 > 0)? units[number/100] + " hundred" + word : word;
return word;
}

public static void main(String[] args) {
System.out.println("1234123456789- " + convertNumber(1234123456789L));
System.out.println("123456789- " + convertNumber(123456789));
System.out.println("37565820- " + convertNumber(37565820));
System.out.println("9341947- " + convertNumber(9341947));
System.out.println("37000- " + convertNumber(37000));
System.out.println("1387- " + convertNumber(1387));
System.out.println("10- " + convertNumber(10));
System.out.println("41- " + convertNumber(41));
}
}

Output


1234123456789- one trillion two hundred thirty four billion one hundred twenty three million four hundred fifty six thousand seven hundred eighty nine
123456789- one hundred twenty three million four hundred fifty six thousand seven hundred eighty nine
37565820- thirty seven million five hundred sixty five thousand eight hundred twenty
9341947- nine million three hundred forty one thousand nine hundred forty seven
37000- thirty seven thousand
1387- one thousand three hundred eighty seven
10- ten
41- forty one

Converting number to words in Java – Indian System

As already stated above, for Indian system in the program we’ll have to get the three digits of the number in first iteration and then two digits in each iteration and put the correct place value after each iteration.

The array for placeValues will change as per Indian system.


public class ConvertNumToWord {
private static final String[] units = {
"",
" one",
" two",
" three",
" four",
" five",
" six",
" seven",
" eight",
" nine"
};
private static final String[] twoDigits = {
" ten",
" eleven",
" twelve",
" thirteen",
" fourteen",
" fifteen",
" sixteen",
" seventeen",
" eighteen",
" nineteen"
};
private static final String[] tenMultiples = {
"",
"",
" twenty",
" thirty",
" forty",
" fifty",
" sixty",
" seventy",
" eighty",
" ninety"
};
private static final String[] placeValues = {
"",
" thousand",
" lakh",
" crore",
" arab",
" kharab"
};

private static String convertNumber(long number) {
String word = "";
int index = 0;
boolean firstIteration = true;
int divisor;
do {
divisor = firstIteration ? 1000 : 100;
// take 3 or 2 digits based on iteration
int num = (int)(number % divisor);
if (num != 0){
String str = ConversionForUptoThreeDigits(num);
word = str + placeValues[index] + word;
}
index++;
// next batch of digits
number = number/divisor;
firstIteration = false;
} while (number > 0);
return word;
}

private static String ConversionForUptoThreeDigits(int number) {
String word = "";
int num = number % 100;
if(num < 10){
word = word + units[num];
}
else if(num < 20){
word = word + twoDigits[num%10];
}else{
word = tenMultiples[num/10] + units[num%10];
}

word = (number/100 > 0)? units[number/100] + " hundred" + word : word;
return word;
}

public static void main(String[] args) {
System.out.println("1234123456789- " + convertNumber(1234123456789L));
System.out.println("326776756- " + convertNumber(326776756));
System.out.println("37565820- " + convertNumber(37565820));
System.out.println("9341947- " + convertNumber(9341947));
System.out.println("37000- " + convertNumber(37000));
System.out.println("1387- " + convertNumber(1387));
System.out.println("10- " + convertNumber(10));
System.out.println("5- " + convertNumber(5));
}
}

Output


1234123456789- twelve kharab thirty four arab twelve crore thirty four lakh fifty six thousand seven hundred eighty nine
326776756- thirty two crore sixty seven lakh seventy six thousand seven hundred fifty six
37565820- three crore seventy five lakh sixty five thousand eight hundred twenty
9341947- ninety three lakh forty one thousand nine hundred forty seven
37000- thirty seven thousand
1387- one thousand three hundred eighty seven
10- ten
5- five

That's all for this topic Converting Numbers to Words - Java Program. If you have any doubt or any suggestions to make please drop a comment. Thanks!


Related Topics

  1. Converting double to int - Java Program
  2. Arrange Non-Negative Integers to Form Largest Number - Java Program
  3. Splitting a String - Java Program
  4. Converting String to int - Java Program
  5. Converting String to Enum Type - Java Program

You may also like -

>>>Go to Java Programs Page


Viewing all articles
Browse latest Browse all 892

Trending Articles