Java program converts the currency amount digits (55555) to words (FIFTY FIVE THOUSAND FIVE HUNDRED FIFTY FIVE DOLLARS)
To run the following program, you have to install JDK on your system.
------
package com.assignment;
import java.math.BigDecimal;
import java.math.MathContext;
public class AmountToWordsConverter {
public static void main(String [] args){
System.out.println(convertAmountToWords(new BigDecimal(55555)));
//FIFTY FIVE THOUSAND FIVE HUNDRED FIFTY FIVE DOLLARS
}
public static String convertAmountToWords(BigDecimal amount) {
String orignalAmount = "";
String go = "";
String gt = "";
String gf = "";
String gg = "";
String gh = "";
String gi = "";
String gj = "";
String gc = "";
String dd = "";
String cc = "";
String[] array = null;
String sAmount = String.valueOf(amount);
if(sAmount.indexOf(".") == -1) {
sAmount += ".0";
}else {
sAmount += "0";
}
if(sAmount.indexOf(".") > 0 ){
array = sAmount.split("\\.");
}else {
array = new String[1];
array[0] = String.valueOf(sAmount);
}
String sNumber = array[0];
String sNumbec = "";
if(array[1].length() == 1 ){
sNumbec = array[1];
}else if(array[1].length() >= 2 ){
sNumbec = "." + array[1];
BigDecimal decimalAmount = new BigDecimal(sNumbec);
decimalAmount = decimalAmount.round(MathContext.DECIMAL32);
sNumbec = decimalAmount.toString();
sNumbec = sNumbec.substring(2, 4);
}
sNumber = getString(sNumber);
Long lNumber = new Long(sNumber);
String sNum2 = String.valueOf(lNumber);
sNumbec = getString(sNumbec);
Long lNumbec = new Long(sNumbec);
String sNumc = String.valueOf(lNumbec);
if (lNumber == 1 || (lNumber == 0 && lNumbec == 0)){
dd = " DOLLAR";
}else if (lNumber > 1) {
dd = " DOLLARS";
}
if (lNumbec == 1){
cc = "CENT";
}else {
cc = "CENTS";
}
if (lNumbec > 0) {
gc = convertToWords(sNumc);
}
int j = sNum2.length();
Integer oNum2 = 0;
if(j == 1) {
oNum2 = Integer.valueOf(sNum2.substring((j-1),((j-1)+1)));
}
if (oNum2 > 0) {
go = convertToWords(String.valueOf(oNum2)) + "";
}
Integer teNum2 = 0;
if(j == 2) {
teNum2 = Integer.valueOf(sNum2.substring((j-2),((j-2)+2)));
}
if (teNum2 > 0) {
gt = convertToWords(String.valueOf(teNum2)) + "";
}
Integer hNum2 = 0;
if(j-3 > -1) {
hNum2 = Integer.valueOf(sNum2.substring((j-3),((j-3)+3)));
}
if (hNum2 > 0) {
gf = convertToWords(String.valueOf(hNum2)) + "";
}
Integer tNum2 = 0;
if((j-6) > -1) {
tNum2 = Integer.valueOf(sNum2.substring(j-6,(j-6)+3));
}else if(j >= 4 ){
tNum2 = Integer.valueOf(sNum2.substring(0,(j-6)+3));
}
if (tNum2 > 0) {
gg = convertToWords(String.valueOf(tNum2)) + " THOUSAND ";
}
Integer mNum2 = 0;
if((j >= 7 || ((j-9) > -1)) && (j < 10)) {
mNum2 = Integer.valueOf(sNum2.substring(0,(j-9)+3));
}
if (mNum2 > 0) {
gh = convertToWords(String.valueOf(mNum2)) + " MILLION ";
}
Integer bNum2 = 0;
if((j >= 10 || ((j-12) > -1)) && (j < 13)) {
bNum2 = Integer.valueOf(sNum2.substring(0,(j-12)+3));
}
if (bNum2 > 0) {
gi = convertToWords(String.valueOf(bNum2)) + " BILLION ";
}
Integer trNum2 = 0;
if(j >= 13 || ((j-15) > -1)){
trNum2 = Integer.valueOf(sNum2.substring(0,(j-15)+3));
}
if (trNum2 > 0) {
gj = convertToWords(String.valueOf(trNum2)) + " TRILLION ";
}
if (sNumber.length() < 1){
gf = "ZERO";
}
if (j > 15){
gj = " Your number is too big for me to spell";
gi = "";
gh = "";
gg = "";
gf = "";
}
String dds = gj + gi + gh + gg + gf + gt + go;
if ("".equals(dds)){
dds = "ZERO";
}
if(lNumbec > 0 && dds.equals("ZERO")) {
dds = "";
}
orignalAmount= dds + dd;
if(!"".equals(dds) && !"".equals(dd) && !"".equals(gc)) {
orignalAmount += " AND ";
}
if(!gc.equals("")) {
orignalAmount += gc + " " + cc;
}
orignalAmount.trim();
orignalAmount = orignalAmount.replace(" ", " ");
return orignalAmount;
}
private static String getString(String a) {
String output="";
String valid="0123456789.";
for (int i=0 ; i< a.length(); i++)
if (valid.indexOf(a.charAt(i)) != -1)
output += a.charAt(i);
return output;
}
private static String convertToWords(String amount) {
String sNum3 = "";
String p1="";
String p2="";
String p3="";
String n1[] =
{"", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX",
"SEVEN", "EIGHT", "NINE", "TEN", "ELEVEN", "TWELVE",
"THIRTEEN", "FOURTEEN", "FIFTEEN", "SIXTEEN", "SEVENTEEN",
"EIGHTEEN", "NINETEEN"};
String n2[] ={"", "", "TWENTY", "THIRTY", "FORTY",
"FIFTY", "SIXTY", "SEVENTY", "EIGHTY", "NINETY"};
sNum3 = amount;
int j = sNum3.length();
Integer h3 = 0;
if(j-3 > -1) {
h3 =Integer.valueOf(sNum3.substring((j-3),(j-3)+1));
}
if (h3 > 0) {
p3= n1[Integer.valueOf(h3)] + " HUNDRED ";}
else {
p3="";
}
Integer t2 = null;
if(j-2 > -1) {
t2 = Integer.valueOf(sNum3.substring((j-2),(j-2)+1), 10);
}
Integer u1 = null;
if(j-1 > -1 ) {
u1 = Integer.valueOf(sNum3.substring((j-1),(j-1)+1), 10);
}
Integer tu21 = null;
if(j-2 > -1) {
tu21 = Integer.valueOf(sNum3.substring((j-2),(j-2)+2), 10);
}
if (tu21 != null && tu21 == 0) {
p1="";
p2="";
} else if ((t2 != null && t2 < 1) && (u1 != null && u1 > 0)) {
p2="";
p1= n1[u1];
} else if (tu21 != null && tu21 < 20) {
p2="";
p1= n1[tu21];
} else if ((t2 != null && t2 > 1) && (u1 == 0)) {
p2= n2[t2];
p1="";
}else {
if(t2 != null){
p2= n2[t2] + " ";
}
if(u1 != null) {
p1=n1[u1] ;
}
}
amount = p3 + p2 + p1;
return amount;
}
}
No comments:
Post a Comment