package com.FitBank.common; /** * Clase que implementa la transformacion de numeros en letras. * Toma un numero, analiza las decenas, centenas, unidades de mil, etc; * toma esa separacion y comienza a generar el numero en letras. * * @author FITBANK * @version 1.0 Octubre 2005 */ public class NumberToLetter { protected int numero; private int flag; private String num, num_letra, num_letras, num_letram, num_letradm, num_letracm, num_letramm, num_letradmm; private String MONEDA_PRINT = "dolares americanos"; /** * Constructor por default de la clase coloca en cero el numero a transformar y encera el flag de la clase. */ public NumberToLetter() { numero = 0; flag = 0; } /** * Metodo que transforma numeros de un digito de numeros a letras. * * @param numero Numero que se va a transformar * * @return Numero en letras */ private String unidad(int numero) { switch (numero) { case 9: num = "nueve"; break; case 8: num = "ocho"; break; case 7: num = "siete"; break; case 6: num = "seis"; break; case 5: num = "cinco"; break; case 4: num = "cuatro"; break; case 3: num = "tres"; break; case 2: num = "dos"; break; case 1: if (flag == 0) { num = "un"; } else { num = "un"; //TODO: Revisar esta condición } break; case 0: num = ""; break; } return num; } /** * Metodo que transforma numeros de dos digitos. * * @param numero Numero que se va a transformar * * @return Decena en Letras */ private String decena(int numero) throws Exception { if (numero >= 90 && numero <= 99) { num_letra = "noventa "; if (numero > 90) { num_letra = num_letra.concat("y ").concat(unidad(numero - 90)); } } else if (numero >= 80 && numero <= 89) { num_letra = "ochenta "; if (numero > 80) { num_letra = num_letra.concat("y ").concat(unidad(numero - 80)); } } else if (numero >= 70 && numero <= 79) { num_letra = "setenta "; if (numero > 70) { num_letra = num_letra.concat("y ").concat(unidad(numero - 70)); } } else if (numero >= 60 && numero <= 69) { num_letra = "sesenta "; if (numero > 60) { num_letra = num_letra.concat("y ").concat(unidad(numero - 60)); } } else if (numero >= 50 && numero <= 59) { num_letra = "cincuenta "; if (numero > 50) { num_letra = num_letra.concat("y ").concat(unidad(numero - 50)); } } else if (numero >= 40 && numero <= 49) { num_letra = "cuarenta "; if (numero > 40) { num_letra = num_letra.concat("y ").concat(unidad(numero - 40)); } } else if (numero >= 30 && numero <= 39) { num_letra = "treinta "; if (numero > 30) { num_letra = num_letra.concat("y ").concat(unidad(numero - 30)); } } else if (numero >= 20 && numero <= 29) { if (numero == 20) { num_letra = "veinte "; } else { num_letra = "veinti".concat(unidad(numero - 20)); } } else if (numero >= 10 && numero <= 19) { switch (numero) { case 10: num_letra = "diez "; break; case 11: num_letra = "once "; break; case 12: num_letra = "doce "; break; case 13: num_letra = "trece "; break; case 14: num_letra = "catorce "; break; case 15: num_letra = "quince "; break; case 16: num_letra = "dieciseis "; break; case 17: num_letra = "diecisiete "; break; case 18: num_letra = "dieciocho "; break; case 19: num_letra = "diecinueve "; break; } } else { num_letra = unidad(numero); } return num_letra; } /** * Metodo que transforma numeros de tres digitos de numeros a letras. * * @param numero Numero que se va a transformar * * @return Numero en letras */ private String centena(int numero) throws Exception { if (numero >= 100) { if (numero >= 900 && numero <= 999) { num_letra = "novecientos "; if (numero > 900) { num_letra = num_letra.concat(decena(numero - 900)); } } else if (numero >= 800 && numero <= 899) { num_letra = "ochocientos "; if (numero > 800) { num_letra = num_letra.concat(decena(numero - 800)); } } else if (numero >= 700 && numero <= 799) { num_letra = "setecientos "; if (numero > 700) { num_letra = num_letra.concat(decena(numero - 700)); } } else if (numero >= 600 && numero <= 699) { num_letra = "seiscientos "; if (numero > 600) { num_letra = num_letra.concat(decena(numero - 600)); } } else if (numero >= 500 && numero <= 599) { num_letra = "quinientos "; if (numero > 500) { num_letra = num_letra.concat(decena(numero - 500)); } } else if (numero >= 400 && numero <= 499) { num_letra = "cuatrocientos "; if (numero > 400) { num_letra = num_letra.concat(decena(numero - 400)); } } else if (numero >= 300 && numero <= 399) { num_letra = "trescientos "; if (numero > 300) { num_letra = num_letra.concat(decena(numero - 300)); } } else if (numero >= 200 && numero <= 299) { num_letra = "doscientos "; if (numero > 200) { num_letra = num_letra.concat(decena(numero - 200)); } } else if (numero >= 100 && numero <= 199) { if (numero == 100) { num_letra = "cien "; } else { num_letra = "ciento ".concat(decena(numero - 100)); } } } else { num_letra = decena(numero); } return num_letra; } /** * Meodo que transforma numeros de tres digitos de numeros a letras . * * @param numero Numero a transformar * * @return Numero en letras */ private String miles(int numero) throws Exception { if (numero >= 1000 && numero < 2000) { num_letram = "un mil ".concat(centena(numero % 1000)); } else if (numero >= 2000 && numero < 10000) { flag = 1; num_letram = unidad(numero / 1000).concat(" mil ").concat(centena(numero % 1000)); } else if (numero < 1000) { num_letram = centena(numero); } return num_letram; } /** * Metodo que transforma numeros de cuatro digitos a letras. * * @param numero Numero a transformar * * @return Numero en letras */ private String decmiles(int numero) throws Exception { if (numero == 10000) { num_letradm = "diez mil"; } if (numero > 10000 && numero < 20000) { flag = 1; num_letradm = decena(numero / 1000).concat("mil ").concat(centena(numero % 1000)); } if (numero >= 20000 && numero < 100000) { flag = 1; num_letradm = decena(numero / 1000).concat(" mil ").concat(miles(numero % 1000)); } if (numero < 10000) { num_letradm = miles(numero); } return num_letradm; } /** * Metodo que transforma numero de cinco digitos en letras. * * @param numero Numero a transformar * * @return Numero en letras */ private String cienmiles(int numero) throws Exception { if (numero == 100000) { num_letracm = "cien mil"; } if (numero >= 100000 && numero < 1000000) { flag = 1; num_letracm = centena(numero / 1000).concat(" mil ").concat(centena(numero % 1000)); } if (numero < 100000) { num_letracm = decmiles(numero); } return num_letracm; } /** * Metodo que transforma numeros de seis digitos en letras. * * @param numero Numero a transformar * * @return Numero en letras */ private String millon(int numero) throws Exception { if (numero >= 1000000 && numero < 2000000) { flag = 1; num_letramm = "Un millon ".concat(cienmiles(numero % 1000000)); } if (numero >= 2000000 && numero < 10000000) { flag = 1; num_letramm = unidad(numero / 1000000).concat(" millones ").concat(cienmiles(numero % 1000000)); } if (numero < 1000000) { num_letramm = cienmiles(numero); } return num_letramm; } /** * Metodo que transforma numeros de siete digitos en letras. * * @param numero Numero a transformar * * @return Numero en letras */ private String decmillon(int numero) throws Exception { if (numero == 10000000) { num_letradmm = "diez millones"; } else if (numero > 10000000 && numero < 20000000) { flag = 1; num_letradmm = decena(numero / 1000000).concat("millones ").concat(cienmiles(numero % 1000000)); } else if (numero >= 20000000 && numero < 100000000) { flag = 1; num_letradmm = decena(numero / 1000000).concat(" milllones ").concat(millon(numero % 1000000)); } else if (numero < 10000000) { num_letradmm = millon(numero); } return num_letradmm; } /** * Metodo que transforma cualquier numero en Letras. * * @param numero Numero a transformar * * @return Numero en letras. */ private String convertirLetras(int numero) throws Exception { num_letras = decmillon(numero); return num_letras; } /** * Metodo que recibe el numero el cual se desea transformar a letras * lo procesa y convierte su valor en su equivalente en letras. * * @param number Cadena que contiene el numero de que se desea transformar a letras, * este puede venir con decimales. * * @return Objeto que contiene la cadena con el valor en letras del numero enviado. */ public String convertNumberToLetters(String number, Boolean withMoney) throws Exception { int integerPart; String[] numberSeparate = Servicios.split(number, "."); integerPart = Integer.parseInt(numberSeparate[0]); String decimalPart = " con " + numberSeparate[1] + "/100 "; String letters = this.convertirLetras(integerPart); if (withMoney.booleanValue()) { letters += decimalPart + this.MONEDA_PRINT; } else { letters += decimalPart; } return letters.toUpperCase(); } }