## Wednesday, November 14, 2018

### Convert Numbers to Words Java Program

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 in words should be- Five thousand four hundred sixty seven.

### Number systems

In Indian system numbers are called differently and even placement is different than in the international system.

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 and how digits are grouped forms the logic for the programs.

### 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 Convert Numbers to Words Java Program. If you have any doubt or any suggestions to make please drop a comment. Thanks!