Convert double to its equivalent in letters JAVA

0

I need to convert something like 92.10 to its equivalent in ahem letters: Ninety-two with 10 cents. It is to show the value in letters for the amount of an invoice but I do not know how to do it, the functions that I have seen all return wrong values I do not know if java also offers some API that can help me.

I found this class but it only works for values without decimals

import java.text.NumberFormat;

public class NumberToWordsConverter {

public static final String[] units = { "", "Uno", "Dos", "Tres", "Cuatro",
        "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce",
        "Trece", "Catorce", "Quince", "Dieciseis", "Diecisiete",
        "Dieciocho", "Diecinueve" };

public static final String[] tens = {
        "",         // 0
        "",     // 1
        "Veinte",   // 2
        "Treinta",  // 3
        "Cuarenta",     // 4
        "Cincuenta",    // 5
        "Sesenta",  // 6
        "Setenta",  // 7
        "Ochenta",  // 8
        "Noventa"   // 9
};

public static String convert(final int n) {
    if (n < 0) {
        return "Minus " + convert(-n);
    }

    if (n < 20) {
        return units[n];
    }

    if (n < 100) {
        return tens[n / 10] + ((n % 10 != 0) ? " " : "") + units[n % 10];
    }

    if (n < 1000) {
        return units[n / 100] + " Cien" + ((n % 100 != 0) ? " " : "") + convert(n % 100);
    }

    if (n < 100000) {
        return convert(n / 1000) + " Mil" + ((n % 10000 != 0) ? " " : "") + convert(n % 1000);
    }

    if (n < 10000000) {
        return convert(n / 100000) + " Lakh" + ((n % 100000 != 0) ? " " : "") + convert(n % 100000);
    }

    return convert(n / 10000000) + " Crore" + ((n % 10000000 != 0) ? " " : "") + convert(n % 10000000);
}

public static void main(final String[] args) {

    int n;

    n = 5;
    System.out.println(NumberFormat.getInstance().format(n) + "='" + convert(n) + "'");

    n = 16;
    System.out.println(NumberFormat.getInstance().format(n) + "='" + convert(n) + "'");

    n = 50;
    System.out.println(NumberFormat.getInstance().format(n) + "='" + convert(n) + "'");

    n = 78;
    System.out.println(NumberFormat.getInstance().format(n) + "='" + convert(n) + "'");

    n = 456;
    System.out.println(NumberFormat.getInstance().format(n) + "='" + convert(n) + "'");

    n = 1000;
    System.out.println(NumberFormat.getInstance().format(n) + "='" + convert(n) + "'");

    n = 99999;
    System.out.println(NumberFormat.getInstance().format(n) + "='" + convert(n) + "'");

    n = 199099;
    System.out.println(NumberFormat.getInstance().format(n) + "='" + convert(n) + "'");

    n = 10005000;
    System.out.println(NumberFormat.getInstance().format(n) + "='" + convert(n) + "'");
}
}
    
asked by Carlos Blanco 12.06.2018 в 21:58
source

0 answers