Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Ejercicios / Java / Numero a Literal en Java

Numero a Literal en Java

Autor jc mouse martes, junio 28, 2011

Cuando se realizan trabajos donde se necesita mostrar al cliente un determinado monto de dinero, tipo factura, recibo, cheque, etc, el cliente desea ver el monto en numeral asi como en literal.

Por ejemplo:

877866,50 = ochocientos setenta y siete mil ochocientos sesenta y seis 50/100 Bolivianos
Pues bien, la siguiente clase a la que llame Numero_a_Letra.java realiza justamente esa operacion, esta extracomentada y trate de hacerla lo mas entendible posible.

La logica que se utliza es la siguiente:

La clase recibe un numero ej. 123456789,50
valida este numero, si el numero no es valido devuelve NULL
Si el numero es valido segun sea este unidad, decena, centena, mil o millon,聽 va clasificando el numero y llama a sus procedimientos correspondientes, estas funciones, son utilizadas en cascada, osea:
nuestro numero de ejemplo es 123456789,50, entonces separa en 123456789 y 50, siendo 50 nuestra parte decimal.

El聽 numero entero, 123456789 es clasificado = es millon, entonces llama a la funcion getMillones, esta funcion a la vez divide el numero en miles y millones
123456789 = 123 456789 donde 123 corresponde a millones y 456789 a miles
entonces la misma funcion llama a las funciones getMiles, getCentenas, getUnidades, segun corresponda, al igual que la funcion getMiles, hace uso de getCentenas, getDecenas getUnidades, lo mismo getCentenas, hace uso de getDececas, getUnidades.

Espero se entienda 馃檪

import java.util.regex.Pattern;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class Numero_a_Letra {

聽聽聽 private final String[] UNIDADES = {"", "un ", "dos ", "tres ", "cuatro ", "cinco ", "seis ", "siete ", "ocho ", "nueve "};
聽聽聽 private final String[] DECENAS = {"diez ", "once ", "doce ", "trece ", "catorce ", "quince ", "dieciseis ",
聽聽聽聽聽聽聽 "diecisiete ", "dieciocho ", "diecinueve", "veinte ", "treinta ", "cuarenta ",
聽聽聽聽聽聽聽 "cincuenta ", "sesenta ", "setenta ", "ochenta ", "noventa "};
聽聽聽 private final String[] CENTENAS = {"", "ciento ", "doscientos ", "trecientos ", "cuatrocientos ", "quinientos ", "seiscientos ",
聽聽聽聽聽聽聽 "setecientos ", "ochocientos ", "novecientos "};

聽聽 public Numero_a_Letra() {
聽聽 }

聽聽聽 public String Convertir(String numero, boolean mayusculas) {
聽聽聽聽聽聽聽 String literal = "";
聽聽聽聽聽聽聽 String parte_decimal;聽聽聽 
聽聽聽聽聽聽聽 //si el numero utiliza (.) en lugar de (,) -> se reemplaza
聽聽聽聽聽聽聽 numero = numero.replace(".", ",");
聽聽聽聽聽聽聽 //si el numero no tiene parte decimal, se le agrega ,00
聽聽聽聽聽聽聽 if(numero.indexOf(",")==-1){
聽聽聽聽聽聽聽聽聽聽聽 numero = numero + ",00";
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 //se valida formato de entrada -> 0,00 y 999 999 999,00
聽聽聽聽聽聽聽 if (Pattern.matches("\\d{1,9},\\d{1,2}", numero)) {
聽聽聽聽聽聽聽聽聽聽聽 //se divide el numero 0000000,00 -> entero y decimal
聽聽聽聽聽聽聽聽聽聽聽 String Num[] = numero.split(",");聽聽聽聽聽聽聽聽聽聽聽 
聽聽聽聽聽聽聽聽聽聽聽 //de da formato al numero decimal
聽聽聽聽聽聽聽聽聽聽聽 parte_decimal = Num[1] + "/100 Bolivianos.";
聽聽聽聽聽聽聽聽聽聽聽 //se convierte el numero a literal
聽聽聽聽聽聽聽聽聽聽聽 if (Integer.parseInt(Num[0]) == 0) {//si el valor es cero
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 literal = "cero ";
聽聽聽聽聽聽聽聽聽聽聽 } else if (Integer.parseInt(Num[0]) > 999999) {//si es millon
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 literal = getMillones(Num[0]);
聽聽聽聽聽聽聽聽聽聽聽 } else if (Integer.parseInt(Num[0]) > 999) {//si es miles
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 literal = getMiles(Num[0]);
聽聽聽聽聽聽聽聽聽聽聽 } else if (Integer.parseInt(Num[0]) > 99) {//si es centena
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 literal = getCentenas(Num[0]);
聽聽聽聽聽聽聽聽聽聽聽 } else if (Integer.parseInt(Num[0]) > 9) {//si es decena
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 literal = getDecenas(Num[0]);
聽聽聽聽聽聽聽聽聽聽聽 } else {//sino unidades -> 9
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 literal = getUnidades(Num[0]);
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 //devuelve el resultado en mayusculas o minusculas
聽聽聽聽聽聽聽聽聽聽聽 if (mayusculas) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return (literal + parte_decimal).toUpperCase();
聽聽聽聽聽聽聽聽聽聽聽 } else {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return (literal + parte_decimal);
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 } else {//error, no se puede convertir
聽聽聽聽聽聽聽聽聽聽聽 return literal = null;
聽聽聽聽聽聽聽 }
聽聽聽 }

聽聽聽 /* funciones para convertir los numeros a literales */

聽聽聽 private String getUnidades(String numero) {// 1 - 9
聽聽聽聽聽聽聽 //si tuviera algun 0 antes se lo quita -> 09 = 9 o 009=9
聽聽聽聽聽聽聽 String num = numero.substring(numero.length() - 1);
聽聽聽聽聽聽聽 return UNIDADES[Integer.parseInt(num)];
聽聽聽 }

聽聽聽 private String getDecenas(String num) {// 99聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 
聽聽聽聽聽聽聽 int n = Integer.parseInt(num);
聽聽聽聽聽聽聽 if (n < 10) {//para casos como -> 01 - 09
聽聽聽聽聽聽聽聽聽聽聽 return getUnidades(num);
聽聽聽聽聽聽聽 } else if (n > 19) {//para 20...99
聽聽聽聽聽聽聽聽聽聽聽 String u = getUnidades(num);
聽聽聽聽聽聽聽聽聽聽聽 if (u.equals("")) { //para 20,30,40,50,60,70,80,90
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return DECENAS[Integer.parseInt(num.substring(0, 1)) + 8];
聽聽聽聽聽聽聽聽聽聽聽 } else {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return DECENAS[Integer.parseInt(num.substring(0, 1)) + 8] + "y " + u;
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 } else {//numeros entre 11 y 19
聽聽聽聽聽聽聽聽聽聽聽 return DECENAS[n - 10];
聽聽聽聽聽聽聽 }
聽聽聽 }

聽聽聽 private String getCentenas(String num) {// 999 o 099
聽聽聽聽聽聽聽 if( Integer.parseInt(num)>99 ){//es centena
聽聽聽聽聽聽聽聽聽聽聽 if (Integer.parseInt(num) == 100) {//caso especial
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return " cien ";
聽聽聽聽聽聽聽聽聽聽聽 } else {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return CENTENAS[Integer.parseInt(num.substring(0, 1))] + getDecenas(num.substring(1));
聽聽聽聽聽聽聽聽聽聽聽 } 
聽聽聽聽聽聽聽 }else{//por Ej. 099 
聽聽聽聽聽聽聽聽聽聽聽 //se quita el 0 antes de convertir a decenas
聽聽聽聽聽聽聽聽聽聽聽 return getDecenas(Integer.parseInt(num)+"");聽聽聽聽聽聽聽聽聽聽聽 
聽聽聽聽聽聽聽 }聽聽聽聽聽聽聽 
聽聽聽 }

聽聽聽 private String getMiles(String numero) {// 999 999
聽聽聽聽聽聽聽 //obtiene las centenas
聽聽聽聽聽聽聽 String c = numero.substring(numero.length() - 3);
聽聽聽聽聽聽聽 //obtiene los miles
聽聽聽聽聽聽聽 String m = numero.substring(0, numero.length() - 3);
聽聽聽聽聽聽聽 String n="";
聽聽聽聽聽聽聽 //se comprueba que miles tenga valor entero
聽聽聽聽聽聽聽 if (Integer.parseInt(m) > 0) {
聽聽聽聽聽聽聽聽聽聽聽 n = getCentenas(m);聽聽聽聽聽聽聽聽聽聽 
聽聽聽聽聽聽聽聽聽聽聽 return n + "mil " + getCentenas(c);
聽聽聽聽聽聽聽 } else {
聽聽聽聽聽聽聽聽聽聽聽 return "" + getCentenas(c);
聽聽聽聽聽聽聽 }

聽聽聽 }

聽聽聽 private String getMillones(String numero) { //000 000 000聽聽聽聽聽聽聽 
聽聽聽聽聽聽聽 //se obtiene los miles
聽聽聽聽聽聽聽 String miles = numero.substring(numero.length() - 6);
聽聽聽聽聽聽聽 //se obtiene los millones
聽聽聽聽聽聽聽 String millon = numero.substring(0, numero.length() - 6);
聽聽聽聽聽聽聽 String n = "";
聽聽聽聽聽聽聽 if(millon.length()>1){
聽聽聽聽聽聽聽聽聽聽聽 n = getCentenas(millon) + "millones ";
聽聽聽聽聽聽聽 }else{
聽聽聽聽聽聽聽聽聽聽聽 n = getUnidades(millon) + "millon ";
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 return n + getMiles(miles);聽聽聽聽聽聽聽 
聽聽聽 }
}

Esta clase, recibe聽 un numero de 0,00 a 999999999.00 en formato String, el separador decimal puede ser un punto (.) o una coma (,), ademas tiene un parametro booleano “mayusculas” el cual sea verdadero (true) o falso (false), retorna el resultado en mayusculas o minusculas, esta clase no acepta numeros negativos ni tampoco numero mayores o iguales a mil millones, aunque claro trate de escribir esta clase para que sea facilmente comprensible y asi pueda ser ampliado o modificado segun sus necesidades.

La forma de llamara a esta clase es:

Numero_a_Letra NumLetra = new Numero_a_Letra();
String numero = "20004.70";
System.out.println( numero聽 + " literal = "+ NumLetra.Convertir(numero,true));

y probando para un rango mayor de numeros tenemos como resultado:

352822,50 literal = TRECIENTOS CINCUENTA Y DOS MIL OCHOCIENTOS VEINTE Y DOS 50/100 BOLIVIANOS.
370,50 literal = trecientos setenta 50/100 Bolivianos.
74883,50 literal = SETENTA Y CUATRO MIL OCHOCIENTOS OCHENTA Y TRES 50/100 BOLIVIANOS.
354801,50 literal = trecientos cincuenta y cuatro mil ochocientos un 50/100 Bolivianos.
12,50 literal = DOCE 50/100 BOLIVIANOS.
511812060,50 literal = QUINIENTOS ONCE MILLONES OCHOCIENTOS DOCE MIL SESENTA 50/100 BOLIVIANOS.
285364,50 literal = doscientos ochenta y cinco mil trecientos sesenta y cuatro 50/100 Bolivianos.
97,50 literal = NOVENTA Y SIETE 50/100 BOLIVIANOS.
882,50 literal = OCHOCIENTOS OCHENTA Y DOS 50/100 BOLIVIANOS.
28,50 literal = VEINTE Y OCHO 50/100 BOLIVIANOS.
395362869,50 literal = TRECIENTOS NOVENTA Y CINCO MILLONES TRECIENTOS SESENTA Y DOS MIL OCHOCIENTOS SESENTA Y NUEVE 50/100 BOLIVIANOS.
687611,50 literal = SEISCIENTOS OCHENTA Y SIETE MIL SEISCIENTOS ONCE 50/100 BOLIVIANOS.
46,50 literal = CUARENTA Y SEIS 50/100 BOLIVIANOS.
394625,50 literal = trecientos noventa y cuatro mil seiscientos veinte y cinco 50/100 Bolivianos.
686671871,50 literal = seiscientos ochenta y seis millones seiscientos setenta y un mil ochocientos setenta y un 50/100 Bolivianos.
860233047,50 literal = OCHOCIENTOS SESENTA MILLONES DOSCIENTOS TREINTA Y TRES MIL CUARENTA Y SIETE 50/100 BOLIVIANOS.
656477159,50 literal = SEISCIENTOS CINCUENTA Y SEIS MILLONES CUATROCIENTOS SETENTA Y SIETE MIL CIENTO CINCUENTA Y NUEVE 50/100 BOLIVIANOS.
99037,50 literal = NOVENTA Y NUEVE MIL TREINTA Y SIETE 50/100 BOLIVIANOS.
159180,50 literal = ciento cincuenta y nueve mil ciento ochenta 50/100 Bolivianos.
69993,50 literal = SESENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y TRES 50/100 BOLIVIANOS.
76,50 literal = setenta y seis 50/100 Bolivianos.
74,50 literal = setenta y cuatro 50/100 Bolivianos.
4,50 literal = cuatro 50/100 Bolivianos.
572356,50 literal = QUINIENTOS SETENTA Y DOS MIL TRECIENTOS CINCUENTA Y SEIS 50/100 BOLIVIANOS.
85,50 literal = OCHENTA Y CINCO 50/100 BOLIVIANOS.
678977004,50 literal = seiscientos setenta y ocho millones novecientos setenta y siete mil cuatro 50/100 Bolivianos.
311275,50 literal = TRECIENTOS ONCE MIL DOSCIENTOS SETENTA Y CINCO 50/100 BOLIVIANOS.
888,50 literal = OCHOCIENTOS OCHENTA Y OCHO 50/100 BOLIVIANOS.
861740125,50 literal = OCHOCIENTOS SESENTA Y UN MILLONES SETECIENTOS CUARENTA MIL CIENTO VEINTE Y CINCO 50/100 BOLIVIANOS.
370246,50 literal = trecientos setenta mil doscientos cuarenta y seis 50/100 Bolivianos.
986444,50 literal = novecientos ochenta y seis mil cuatrocientos cuarenta y cuatro 50/100 Bolivianos.
202,50 literal = DOSCIENTOS DOS 50/100 BOLIVIANOS.
407295,50 literal = CUATROCIENTOS SIETE MIL DOSCIENTOS NOVENTA Y CINCO 50/100 BOLIVIANOS.
522,50 literal = QUINIENTOS VEINTE Y DOS 50/100 BOLIVIANOS.
378878653,50 literal = TRECIENTOS SETENTA Y OCHO MILLONES OCHOCIENTOS SETENTA Y OCHO MIL SEISCIENTOS CINCUENTA Y TRES 50/100 BOLIVIANOS.
712142,50 literal = SETECIENTOS DOCE MIL CIENTO CUARENTA Y DOS 50/100 BOLIVIANOS.
588737075,50 literal = QUINIENTOS OCHENTA Y OCHO MILLONES SETECIENTOS TREINTA Y SIETE MIL SETENTA Y CINCO 50/100 BOLIVIANOS.
946540,50 literal = novecientos cuarenta y seis mil quinientos cuarenta 50/100 Bolivianos.
34667457,50 literal = treinta y cuatro millones seiscientos sesenta y siete mil cuatrocientos cincuenta y siete 50/100 Bolivianos.
391874,50 literal = trecientos noventa y un mil ochocientos setenta y cuatro 50/100 Bolivianos.
745,50 literal = SETECIENTOS CUARENTA Y CINCO 50/100 BOLIVIANOS.
670024,50 literal = seiscientos setenta mil veinte y cuatro 50/100 Bolivianos.
703029,50 literal = setecientos tres mil veinte y nueve 50/100 Bolivianos.
745,50 literal = setecientos cuarenta y cinco 50/100 Bolivianos.
975415558,50 literal = NOVECIENTOS SETENTA Y CINCO MILLONES CUATROCIENTOS QUINCE MIL QUINIENTOS CINCUENTA Y OCHO 50/100 BOLIVIANOS.
294,50 literal = DOSCIENTOS NOVENTA Y CUATRO 50/100 BOLIVIANOS.
559794,50 literal = quinientos cincuenta y nueve mil setecientos noventa y cuatro 50/100 Bolivianos.
23,50 literal = veinte y tres 50/100 Bolivianos.
586335,50 literal = QUINIENTOS OCHENTA Y SEIS MIL TRECIENTOS TREINTA Y CINCO 50/100 BOLIVIANOS.
14174901,50 literal = catorce millones ciento setenta y cuatro mil novecientos un 50/100 Bolivianos.
529551002,50 literal = quinientos veinte y nueve millones quinientos cincuenta y un mil dos 50/100 Bolivianos.
930,50 literal = NOVECIENTOS TREINTA 50/100 BOLIVIANOS.
581617,50 literal = quinientos ochenta y un mil seiscientos diecisiete 50/100 Bolivianos.
44,50 literal = CUARENTA Y CUATRO 50/100 BOLIVIANOS.
727302804,50 literal = SETECIENTOS VEINTE Y SIETE MILLONES TRECIENTOS DOS MIL OCHOCIENTOS CUATRO 50/100 BOLIVIANOS.
66,50 literal = SESENTA Y SEIS 50/100 BOLIVIANOS.
34618398,50 literal = TREINTA Y CUATRO MILLONES SEISCIENTOS DIECIOCHO MIL TRECIENTOS NOVENTA Y OCHO 50/100 BOLIVIANOS.
477354079,50 literal = CUATROCIENTOS SETENTA Y SIETE MILLONES TRECIENTOS CINCUENTA Y CUATRO MIL SETENTA Y NUEVE 50/100 BOLIVIANOS.
813,50 literal = OCHOCIENTOS TRECE 50/100 BOLIVIANOS.
634888270,50 literal = SEISCIENTOS TREINTA Y CUATRO MILLONES OCHOCIENTOS OCHENTA Y OCHO MIL DOSCIENTOS SETENTA 50/100 BOLIVIANOS.
219544,50 literal = DOSCIENTOS DIECINUEVEMIL QUINIENTOS CUARENTA Y CUATRO 50/100 BOLIVIANOS.
51,50 literal = cincuenta y un 50/100 Bolivianos.
435640,50 literal = CUATROCIENTOS TREINTA Y CINCO MIL SEISCIENTOS CUARENTA 50/100 BOLIVIANOS.
557896,50 literal = quinientos cincuenta y siete mil ochocientos noventa y seis 50/100 Bolivianos.
36,50 literal = TREINTA Y SEIS 50/100 BOLIVIANOS.
710,50 literal = SETECIENTOS DIEZ 50/100 BOLIVIANOS.
850,50 literal = OCHOCIENTOS CINCUENTA 50/100 BOLIVIANOS.
230498844,50 literal = doscientos treinta millones cuatrocientos noventa y ocho mil ochocientos cuarenta y cuatro 50/100 Bolivianos.
104296,50 literal = ciento cuatro mil doscientos noventa y seis 50/100 Bolivianos.
1,50 literal = UN 50/100 BOLIVIANOS.
-0100100,70 literal = null
003,70 literal = tres 70/100 Bolivianos.
28,745 literal = null
0,5 literal = CERO 5/100 BOLIVIANOS.
999999999 literal = NOVECIENTOS NOVENTA Y NUEVE MILLONES NOVECIENTOS NOVENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y NUEVE 00/100 BOLIVIANOS.
9999999999 literal = null
48803770 literal = cuarenta y ocho millones ochocientos tres mil setecientos setenta 00/100 Bolivianos.
20004.70 literal = VEINTE MIL CUATRO 70/100 BOLIVIANOS.
el Codigo del proyecto en Netbeans 6.9
Click para descargar
Si se encuentra algun error porfavor avisar

Tags

Si te ha gustado podr铆as compartirlo o dejar un comentario. 隆Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnolog铆a en Bolivia.

Toda la informaci贸n que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si as铆 lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

Tambi茅n Te Podr铆a Interesar

Env铆o de correo con JavaMail/Netbeans

Env铆o de correo con JavaMail/Netbeans

JavaMail es una expansi贸n de Java que facilita el env铆o y recepci贸n de e-mail desde c贸digo java. JavaMail implementa el...

Listar dispositivos de impresi贸n

Listar dispositivos de impresi贸n

El siguiente c贸digo te muestra una lista de los dispositivos de impresi贸n que tenemos instalado en el sistema import jav...

Impresi贸n de reportes con JasperReport + YAPA

Impresi贸n de reportes con JasperReport + YAPA

En un post anterior [Guardar reporte PDF directamente con Jasperreports] vimos una manera de imprimir reportes directame...

C贸digo de Control en PHP v7.0 Bolivia

C贸digo de Control en PHP v7.0 Bolivia

NUEVA ESPECIFICACI脫N T脡CNICA DEL C脫DIGO DE CONTROL (Ver.7.0) En el marco del Nuevo Sistema de Facturaci贸n implementado p...

Proyecto de base de datos Firebird VB

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicaci贸n de base de datos Firebird con el lenguaje de programaci贸n de Visual Basic d...

Conectar java con Firebird

Conectar java con Firebird

En este tutorial veremos la forma de conectarse a una base de datos de Firebird utilizando el lenguaje Java y el IDE Net...

2 comentarios en “Numero a Literal en Java”

  1. cochi dice:

    hola… mouse (####)… por favor podrias arreglar el enlace de descarga…. creo que volviste a meter la pata.

    1. Mouse dice:

      enlaces activos

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

脷ltimas entradas

JSON es un formato de texto ligero para el intercambio de datos ampliamente usado en los Servicios Web. En este post uti...

En este post conoceremos algunos de los operadores de comparaci贸n que existen en Linux y realizaremos unos ejercicios pa...

En este post conocernos lo que son las Estructuras de Control IF en los script de Bash.聽Estas estructuras nos ayudan a c...

Todo producto tecnol贸gico tiene un ciclo de vida, algunos bastante corto otros muy largo, podemos mencionar el software...

Android Bolivia

MAUS