@see http://www.rgagnon.com/javadetails/java-0426.html
*/
public class CurrencyConverterToText {
private static final String[] grandeNumeros = {
“”,
“mil”,
“milhão”,
“bilhão”,
“trilhão”,
“quatrilhão”
};
private static final String[] grandeNumerosPlural = {
“”,
“mil”,
“milhões”,
“bilhões”,
“trilhões”,
“quatrilhões”
};
private static final String[] centenas = {
“”,
“cento”,
“duzentos”,
“trezentos”,
“quatrocentos”,
“quinhentos”,
“seissentos”,
“setecentos”,
“oitocentos”,
“novecentos”
};
private static final String[] dezenas = {
“”,
“dez”, // Apenas para deixar cada número “em seu lugar” -> dezenas[2] == “vinte”
“vinte”,
“trinta”,
“quarenta”,
“cinqüenta”,
“sessenta”,
“setenta”,
“oitenta”,
“noventa”
};
private static final String[] numeros = {
“”,
“um”,
“dois”,
“três”,
“quantro”,
“cinco”,
“seis”,
“sete”,
“oito”,
“nove”,
“dez”,
“onze”,
“doze”,
“treze”,
“quatorze”,
“quinze”,
“dezesseis”,
“dezessete”,
“dezoito”,
“dezenove”
};
private StringBuffer convertLessThanOneThousand(int numero) {
StringBuffer numPorExtenso = new StringBuffer("");
if (numero == 0)
return numPorExtenso;
if (numero % 100 < 20){
numPorExtenso.append(numeros[numero % 100]);
numero /= 100;
if(numero > 0) {
numPorExtenso.insert(0, " e ");
}
} else {
numPorExtenso.append(numeros[numero % 10]);
numero /= 10;
numPorExtenso.insert(0, " e ");
numPorExtenso.insert(0, dezenas[numero % 10]);
numero /= 10;
}
if(numero > 0) {
numPorExtenso.insert(0, " e ");
}
return numPorExtenso.insert(0, centenas[numero]);
}
private String convert(int numero) {
StringBuffer numPorExtenso = new StringBuffer("");
String prefix = "";
String sufix = "";
if (numero == 0) {
return "";
}
/* Números negativos ficam entre parênteses.
* Ex: positivo -> 1269, negativo -> (1269) */
if (numero < 0) {
numero = -numero;
prefix = "(";
sufix = ")";
}
int casa_milhar = 0;
do {
int n = numero % 1000;
if (n != 0) {
StringBuffer s = convertLessThanOneThousand(n);
numPorExtenso = s.append(" " + grandeNumeros[casa_milhar]).append(" " + numPorExtenso);
}
casa_milhar++;
numero /= 1000;
} while (numero > 0);
return (prefix + numPorExtenso + sufix).trim();
}