DE NUMEROS A LETRAS EN JAVA

Bueno como estan este es mi primera publicacion de codigo de java basado en conversion de numeros a letras para este ejemplo utlizo 3 clases

1 .- clase a en esta clase se organiza el valor del numero y ordena de cada 3 cifras. para esto he creado 6 funciones con sus respectivos parametros (main,pos,revertir,separar,invertir) basicamente acepta numeros de cada 3 cifras  es decir (3,6,9,12,15,18,etc)

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.dom.lee;

/**
*
* @author JorgeHuamaniAlvaro
*/
public class a {
//aki declarando vector bidimensional
static String[][] UNIDADES =new String[5][];
static String zero[]=new String[20];
//aki declaro variables tipo cadena, letranum
static String letranum,uni,z,j,res=””;
static int axu;
static void m_carga_letras(){
UNIDADES[0]= new String[]{“”, ” un ” , “dos”,”tres ” , “cuatro”,”cinco ” , “seis”,”siete ” , “ocho”, “nueve ” };
UNIDADES[1]= new String[]{“”, ” diez ” , “vienti”,”treinta ” , “cuarenta”,”cincuenta ” , “sesenta”,”setenta ” , “ochenta”, “noventa ” };
UNIDADES[2]= new String[]{“”, ” ciento ” , “doscientos”,”trescientos ” , “cuatrocientos”,”quinientos ” , “seiscientos”,”setecientos” , “ochocientos”, “novecientos ” };
UNIDADES[3]= new String[]{“”, ” mil ” , “millon”,”mil ” , “billon”,”mil ” , “trillon”,”mil ” , “cuatrillon”, “mil ” , “quintillon”};
UNIDADES[4]= new String[]{“”, “ONCE “, “DOCE “, “TRECE “, “CATORCE “, “QUINCE “, “DIECISEIS”,”DIECISIETE”, “DIECIOCHO”, “DIECINUEVE”};
// 0 1 2 **3 4 5 6 7 8 9 10
}
public static String main(String arg) {
//aki este metodo carga valores de matrices
m_carga_letras();
//aki recibe valores del parametro ejemplo puede ser un numero como 17255
String letranum=arg;
/*aki la variable t captura le longitud total de la cadena letranum
en programacion java %=mod de visula basic, lo que hace el mod es obtener el resto de una division
ejemplo
17255/3=5751 y el resto es 2
*/
int t=letranum.length()%3;
//aki invoco el metodo pos que devuelve el valor de numero en letras
pos(letranum.length()-t,letranum.substring(t,letranum.length() ) );
//a la vez devuelve el valor obtenido
return arg=res;
}
static String pos(int p,String car){
String aux=””;
int r=p/3;
//r es resultado de la resta de total de logitud de cadena – el resto obtenido
int ac=0;
//aki se hace un recorrido
for(int y=1;y<=p;y++){
aux=aux+car.substring(y-1, y);
// aki si la longitud de la cadena aux=3
if(aux.length()==3){
//ac aumenta de 1 en 1
ac++;
System.out.println(aux);
//aki dentro del recorrido se llama al metodo separar
separar(aux, ac,r-1);
//a simismo el valor de r disminuye de 1 en 1
r–;
//la cadena aux queda en vacio listo para volverlo a llenar de 3 cifras mas segun sea el valor
aux="";
}
}
//aqui retorna valores de numero en letras
return res;
}
static String invertir(String v){
String n="";
//aki lo que hace es si recibe valores como 123 devuelve 321 osea lo invierte de posicion
for(int d=v.length();d>=1;d–){
n=n+v.substring(d-1,d);
}
return n;
}
}

2 .- clase b en esta clase el codigo es mas sencillo porque aki defrente activo los valores de matrices segun el valor de numero que lo corresponda es decir si tengo 1 o 2 cifras,  los ultimos valores,  ejemplo 1 234567 o 91 234567  1 representa 1 millon o 91 millon estos los convertira su valor en letras que le corresponde ver codigo :
/**
*
* @author JORGE HUAMANI
*/
public class b {
static String[][] UNIDADES =new String[5][];
static String so;
static void m_carga_letras(){
UNIDADES[0]= new String[]{"", " un " , "dos","tres " , "cuatro","cinco " , "seis","siete " , "ocho", "nueve " };
UNIDADES[1]= new String[]{"", " diez " , "vienti","treinta " , "cuarenta","cincuenta " , "sesenta","setenta " , "ochenta", "noventa " };
UNIDADES[2]= new String[]{"", " ciento " , "doscientos","trescientos " , "cuatrocientos","quinientos " , "seiscientos","setecientos" , "ochocientos", "novecientos " };
UNIDADES[3]= new String[]{"", " mil " , "millon","mil " , "billon","mil " , "trillon","mil " , "cuatrillon", "mil " , "quintillon"};
UNIDADES[4]= new String[]{"", "ONCE ", "DOCE ", "TRECE ", "CATORCE ", "QUINCE ", "DIECISEIS","DIECISIETE", "DIECIOCHO", "DIECINUEVE"};
// 0 1 2 **3 4 5 6 7 8 9 10
}
public static String main(String arg,String cont,String conp,int r) {
m_carga_letras();
//conp=X2 cont=?/3=r arg=lenght
String letranum=arg;
if(r==0)cont="0";
switch (Integer.parseInt(letranum)){
case 1:
so=UNIDADES[0][Integer.parseInt(conp)]+" "+UNIDADES[3][Integer.parseInt(cont)];
case 2:
if(Integer.parseInt(conp)>10 && Integer.parseInt(conp)< 20){
so=UNIDADES[4][Integer.parseInt(conp.substring(1,2))]+" "+UNIDADES[3][Integer.parseInt(cont)];
}
if(Integer.parseInt(conp)>20){
so=UNIDADES[1][Integer.parseInt(conp.substring(0,1))]+" "+UNIDADES[0][Integer.parseInt(conp.substring(1,2))]+" "+UNIDADES[3][Integer.parseInt(cont)];
}
}
return so.toUpperCase()+" ";
}
}

3 .- clase jlex en esta clase lo unico que hago es instanciar a las clases a y b segun sea la gama de numero que quiera convertirlo en letras.

tambien le doy una serie de condiciones para evitar excepciones de error, asi me ahorro el problema de cruceta de logica algoritmica:

import javax.swing.JOptionPane;

/**
*
* @author JORGE HUAMANI ALVARO
*/
public class jlex {
static a a;
static b b;
public static void main(String arg[]){
a=new a();
b=new b();
String f="";
String e="";
int t,y = 0,pos=0;
String letra=JOptionPane.showInputDialog( null,"Ingrese numero");
t=letra.length()%3;

f=a.main(letra);
if(t>0){
if(letra.length()>9){
pos=(((letra.length()-t)/3)+1);
e=b.main(String.valueOf(t),String.valueOf(pos-1),letra.substring(0,t),1);
}else if(letra.length()>3 && letra.length()<9){
pos=(((letra.length()-t)/3)+1);
e=b.main(String.valueOf(t),String.valueOf(pos-1),letra.substring(0,t),1);
}else if(letra.length()<3){
e=b.main(String.valueOf(letra.length()),String.valueOf(letra.length()),letra,0);
}
}
//1234567
System.out.print(letra);
System.out.print(e+" "+f);
//System.out.print(f);
}
}

bueno al final les tiene que salir asi
Resultado

Ustedes lo pueden modificar a su gusto yo solamente lo he jugado a nivel de entero y ..jeje String .

(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = “//connect.facebook.net/es_LA/all.js#xfbml=1&appId=187222221360142″;
fjs.parentNode.insertBefore(js, fjs);
}(document, ‘script’, ‘facebook-jssdk’));

2 respuestas a DE NUMEROS A LETRAS EN JAVA

  1. bastian bastias dijo:

    el método separar qué hace??

    • alvaro721 dijo:

      el metodo separar lo que hace es recibir numeros de 3 cifras por ejemplo de 123 o 456,
      una vez recibido procede a separar de 123 a {23} o de 456 a {56} entonces {bc} es condicionado
      de la siguiente forma
      si({bc}>10 y {bc}<20)
      si es verdadero llamar funcion convertir posibles letras de once a dicinueve de la matriz {"once","doce",etc} para los numeros bc
      si es falso llamar funcion convertir posibles letras de veinte a noventa de la matriz {"diez","veinte",etc} para el numero b y la matriz {"uno","dos",etc} para el numero c
      de ahi se concatena la letras de a+b+c
      en donde a por excelencia representa a posibles letras desde cien a novecientos

      en resumen la funcion separar cumple el rol de dar conversion de letras a los numeros divisibles sobre 3, esto lo hace de 3 en 3, dentro la funcion los valores de 123 son invertidos algo como 321 para formar la letra ciento veinti tres
      bueno espero que te sirva

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s