Ingresar:

Cristian Denis Mamani Torres :: Blog :: Convertir un número a literal en Java

July 29, 2008

Lo he necesitado hoy, tal vez tu también puedas necesitarlo:

  public class Literal   {       //valor nos dice si es que es unidad de miles       private static String unidades(int num, boolean valor)          {           String res = "";                     switch(num)           {                          case 1: res = valor?"un":"uno"; break;               case 2: res = "dos"; break;               case 3: res = "tres"; break;               case 4: res = "cuatro"; break;               case 5: res = "cinco"; break;               case 6: res = "seis"; break;               case 7: res = "siete"; break;               case 8: res = "ocho"; break;               case 9: res = "nueve"; break;                      }                  return res;          }             //valor nos dice si es que es decena de miles       private static String decenas(int num, boolean valor)       {           String res = "";                     if (num < 10)           {               res = unidades(num, false);              }           else if (num == 10)               res = "diez";           else if (num == 11)               res = "once";           else if (num == 12)               res = "doce";           else if (num == 13)               res = "trece";           else if (num == 14)               res = "catorce";           else if (num == 15)               res = "quince";           else if (num >= 16 && num < 20)                  res = "dieci"+unidades(num-10, valor);           else if (num >= 20 && num < 30)               res = "veint"+(num-20==0?"e":"i"+unidades(num-20, valor));           else if (num >= 30 && num < 40)               res = "treinta"+(num-30==0?"":" y "+unidades(num-30, valor));           else if (num >= 40 && num < 50)               res = "cuarenta"+(num-40==0?"":" y "+unidades(num-40, valor));           else if (num >= 50 && num < 60)               res = "cincuenta"+(num-50==0?"":" y "+unidades(num-50, valor));           else if (num >= 60 && num < 70)               res = "sesenta"+(num-60==0?"":" y "+unidades(num-60, valor));           else if (num >= 70 && num < 80)               res = "setenta"+(num-70==0?"":" y "+unidades(num-70, valor));           else if (num >= 80 && num < 90)               res = "ochenta"+(num-80==0?"":" y "+unidades(num-80, valor));           else if (num >= 90 && num < 100)               res = "noventa"+(num-90==0?"":" y "+unidades(num-90, valor));                     return res;       }             //valor nos dice si es que es centena de miles       private static String centenas(int num, boolean valor)       {           String res = "";                     if (num < 100)               res = decenas(num,valor);           else if (num>=100 && num < 200)               res = "cien"+(num-100==0?"":"to "+decenas(num-100,valor));           else if (num>=200 && num < 300)               res = "doscientos"+(num-200==0?"":" "+decenas(num-200,valor));           else if (num>=300 && num < 400)               res = "trescientos"+(num-300==0?"":" "+decenas(num-300,valor));           else if (num>=400 && num < 500)               res = "cuatrocientos"+(num-400==0?"":" "+decenas(num-400,valor));           else if (num>=500 && num < 600)               res = "quinientos"+(num-500==0?"":" "+decenas(num-500,valor));           else if (num>=600 && num < 700)               res = "seiscientos"+(num-600==0?"":" "+decenas(num-600,valor));           else if (num>=700 && num < 800)               res = "setecientos"+(num-700==0?"":" "+decenas(num-700,valor));           else if (num>=800 && num < 900)               res = "ochocientos"+(num-800==0?"":" "+decenas(num-800,valor));           else if (num>=900 && num < 1000)               res = "novecientos"+(num-900==0?"":" "+decenas(num-900,valor));                     return res;       }             private static String unidadMiles(int num)       {           String res ="";           if (num<1000)               res = centenas(num,false);           else if(num >= 1000 && num < 2000)               res = "mil"+centenas(num%1000, false);           else               res = centenas(num/1000, true)+" mil "+centenas(num%1000, false);                        return res;              }             private static String millon(int num)       {           String res = "";                     if (num < 1000000)               res = unidadMiles(num);           else if (num == 1000000)               res = "Un millón ";           else               res = unidades(num/1000000, true)+" millones "+unidadMiles(num%1000000);                         return res;                 }       public static String convertir(int num)       {           if (num==0)               return "cero";           else if (num > 0 && num <= 9999999)           {               String res = millon(num);               char primero = res.charAt(0);               return String.valueOf(primero).toUpperCase()+res.substring(1);           }                         else return "FUERA DEL RANGO!!";       }             public static String getMonto(double valor){           String numero = String.valueOf(valor);           int punto = numero.indexOf(".");           String entero = convertir(Integer.parseInt(numero.substring(0,punto)));                  String decimal =numero.substring(punto+1);                     return entero+" "+decimal+"/100";       }       public static String getMonto(Double valor){                            return getMonto(valor.doubleValue());       }       public static void main(String ar[])       {           System.out.println(convertir(1384388));              }   }    

Palabras clave: código útil, java

Enviado por Cristian Denis Mamani Torres



Comentarios

  1. Bueno, recuero haber dado este ejericio a varios alumnos, tratare de buscar sus soluciones, habian algunas muy interesantes :) y más cortas.

    Es necesario para facturas :)

     

    SALUDOS 

    user iconWilfredo Vargas Almendras on Tuesday, 29 July 2008, 16:29 BOT # |

  2. Ok profesor Willy, busque sus soluciones o sino ud. publique una más corta... :P

    user iconCristian Denis Mamani Torres on Tuesday, 29 July 2008, 18:25 BOT # |

  3. Lucha de Titanes ......... Tongue out ......... Bueno ya enserio,

    Esta version esta en base a la version presentada por Cristian, no diria que es mejor (porque hay unas cuantas cosas en la version de Cristian que sinceramente no se me habrian ocurrido) solo es un poco diferente.

      public class Literal_version2   {   //valor nos dice si es que es unidad de miles   private static String unidades(int num, boolean valor)   {   String res = "";   switch(num)   {   case 1: res = valor?"un":"uno"; break;   case 2: res = "dos"; break;   case 3: res = "tres"; break;   case 4: res = "cuatro"; break;   case 5: res = "cinco"; break;   case 6: res = "seis"; break;   case 7: res = "siete"; break;   case 8: res = "ocho"; break;   case 9: res = "nueve"; break;   }   return res;   }   //valor nos dice si es que es decena de miles   private static String decenas(int num, boolean valor)   {   String res = "";   if (num < 10)   res = unidades(num, false);   else   switch(num)   {   case 10: res = "diez"; break;   case 11: res = "once"; break;   case 12: res = "doce"; break;   case 13: res = "trece"; break;   case 14: res = "catorce"; break;   case 15: res = "quince"; break;   default :   {   if (num < 20)   res = "dieci"+unidades(num-10, valor);   else if (num < 30)   res = "veint"+(num-20==0?"e":"i"+unidades(num-20, valor));   else if (num < 40)   res = "treinta"+(num-30==0?"":" y "+unidades(num-30, valor));   else if (num < 50)   res = "cuarenta"+(num-40==0?"":" y "+unidades(num-40, valor));   else if (num < 60)   res = "cincuenta"+(num-50==0?"":" y "+unidades(num-50, valor));   else if (num < 70)   res = "sesenta"+(num-60==0?"":" y "+unidades(num-60, valor));   else if (num < 80)   res = "setenta"+(num-70==0?"":" y "+unidades(num-70, valor));   else if (num < 90)   res = "ochenta"+(num-80==0?"":" y "+unidades(num-80, valor));   else if (num < 100)   res = "noventa"+(num-90==0?"":" y "+unidades(num-90, valor));   }   }   return res;   }   //valor nos dice si es que es centena de miles   private static String centenas(int num, boolean valor)   {   String res = "";   if (num < 100)   res = decenas(num,valor);   else if (num < 200)   res = "cien"+(num-100==0?"":"to "+decenas(num-100,valor));   else if (num < 300)   res = "doscientos"+(num-200==0?"":" "+decenas(num-200,valor));   else if (num < 400)   res = "trescientos"+(num-300==0?"":" "+decenas(num-300,valor));   else if (num < 500)   res = "cuatrocientos"+(num-400==0?"":" "+decenas(num-400,valor));   else if (num < 600)   res = "quinientos"+(num-500==0?"":" "+decenas(num-500,valor));   else if (num < 700)   res = "seiscientos"+(num-600==0?"":" "+decenas(num-600,valor));   else if (num < 800)   res = "setecientos"+(num-700==0?"":" "+decenas(num-700,valor));   else if (num < 900)   res = "ochocientos"+(num-800==0?"":" "+decenas(num-800,valor));   else if (num < 1000)   res = "novecientos"+(num-900==0?"":" "+decenas(num-900,valor));   return res;   }   private static String unidadMiles(int num)   {   String res ="";   if (num<1000)   res = centenas(num,false);   else if(num < 2000)   res = "mil"+centenas(num%1000, false);   else   res = centenas(num/1000, true)+" mil "+centenas(num%1000, false);   return res;   }   private static String millon(int num)   {   String res = "";   if (num < 1000000)   res = unidadMiles(num);   else if (num < 2000000)   res = "Un millon "+unidadMiles(num%1000000);   else   res = unidades(num/1000000, true)+" millones "+unidadMiles(num%1000000);   return res;   }   public static String convertir(int num)   {   if (num==0)   return "cero";   else if (num <= 9999999)   {   String res = millon(num);   char primero = res.charAt(0);   return String.valueOf(primero).toUpperCase()+res.substring(1);   }   else return "FUERA DEL RANGO!!";   }   public static void main(String ar[])   {   System.out.println(convertir(1384388));   System.out.println(convertir(6666668));   System.out.println(convertir(1010101));   System.out.println(convertir(4567));   System.out.println(convertir(27));   }   }    

    user iconHappyFaceDead on Tuesday, 29 July 2008, 21:51 BOT # |

  4. #2. Alumno Cristian, esa es su tarea :P

    Ya en serio, tratare de buscar las soluciones y proponer alguna otra :). 

    user iconWilfredo Vargas Almendras on Friday, 01 August 2008, 19:34 BOT # |

  5. Bueno el ejercicio me parecio interesante, porque vi la propuesta del problema cuando estaba en inf-135 y nunca me anime a hacerla, aparte que sabía mucho, pero mucho menos de programación que ahora, en realidad nada estamos deacuerdo no....??

    El programa que te devuelve un número entero, positivo o negativo, ingresado por teclado en literal soporta hasta un número de 9 dígitos porque ya me dio flojera hacer cifras de miles de millones y para un número mayor a 11 tendría que usar long....pero funciona, no es de lo más eficiente, dudo que sea eficiente pero me emocioné con el ejercicio.....saludos.

      import java.util.InputMismatchException;   import java.util.Scanner;   /**   public class Ejercicio {       public static void main(String[] args) {           Scanner scan = new Scanner(System.in);           int dato = 0;           while( scan.hasNext() ){               try{                   dato = scan.nextInt();                   if( dato < 0 ){                       String negativo = ""+dato;                       negativo = negativo.substring(1);                       int datoPositivo = Integer.parseInt(negativo);                       System.out.println("menos "+darLiteral(datoPositivo));                   }                   else                       System.out.println(darLiteral(dato));               }catch(InputMismatchException exc){                   System.out.println("Numero demasiado grande "+exc);                   dato = scan.nextInt();               }           }       }             private static int cantidadDigitos( int n ){           int cantidad = 1;           while( n >= 10 ){               cantidad += 1;               n /=10;           }           return cantidad;       }             public static String darLiteral( int n ){           String literal = "";           int cantDigitos = cantidadDigitos(n);           if(cantDigitos > 9)               System.out.println("El número es demasiado grande!!");           else               switch(cantDigitos){               case 1: literal = darUnidades(n); break;               case 2: literal = darDecenas(n); break;               case 3: literal = darCentenas(n); break;               case 4: literal = darMilesimas(n); break;               case 5: literal = darDecenasMil(n); break;               case 6: literal = darCentenasMil(n); break;               default: literal = darMillonesimas(n);               }           return literal;       }             private static String darUnidades( int n ){           String unidad = "";           switch(n){           case 0: unidad = "cero"; break;           case 1: unidad = "uno"; break;           case 2: unidad = "dos"; break;           case 3: unidad = "tres"; break;           case 4: unidad = "cuatro"; break;           case 5: unidad = "cinco"; break;           case 6: unidad = "seis"; break;           case 7: unidad = "siete"; break;           case 8: unidad = "ocho"; break;           case 9: unidad = "nueve"; break;           }           return unidad;       }       private static String darDecenas( int n ){           String decena = "";           int unidad = n%10;           boolean exacto = (n%10 == 0);                     if( (n >= 10) && (n <= 15) )               switch(n){               case 10: decena = "diez"; break;               case 11: decena = "once"; break;               case 12: decena = "doce"; break;               case 13: decena = "trece"; break;               case 14: decena = "catorce"; break;               case 15: decena = "quince"; break;               }           else               if( (n >= 16) && (n <= 19) )                   decena = "dieci"+darUnidades(unidad);               else                   if( exacto )                       switch( n ){                       case 20: decena = "veinte"; break;                       case 30: decena = "treinta"; break;                       case 40: decena = "cuarenta"; break;                       case 50: decena = "cincuenta"; break;                       case 60: decena = "sesenta"; break;                       case 70: decena = "setenta"; break;                       case 80: decena = "ochenta"; break;                       case 90: decena = "noventa"; break;                       }                   else{                       int decenaAux = n/10;                       switch( decenaAux ){                       case 2: decena = "veinti"+darUnidades(unidad); break;                       case 3: decena = "treinta y "+darUnidades(unidad); break;                       case 4: decena = "cuarenta y "+darUnidades(unidad); break;                       case 5: decena = "cincuenta y "+darUnidades(unidad); break;                       case 6: decena = "sesenta y "+darUnidades(unidad); break;                       case 7: decena = "setenta y "+darUnidades(unidad); break;                       case 8: decena = "ochenta y "+darUnidades(unidad); break;                       case 9: decena = "noventa y "+darUnidades(unidad); break;                       }                   }                     return decena;       }             private static String darCentenas( int n ){           String centena = "";           boolean exacto = (n%100 == 0);           int resto = n%100;           int div = n/100;                     if( div != 1 && div != 5 && div != 7 && div != 9 ){               String cad = darUnidades(div)+"cientos ";               if( exacto )                   centena = cad;               else                   if( resto > 9 )                       centena = cad+darDecenas(resto);                   else                       centena = cad+darUnidades(resto);           }           else               switch( div ){               case 1: if( exacto )                           centena = "cien";                       else                           if( resto > 9 )                               centena = "ciento "+darDecenas(resto);                           else                               centena = "ciento "+darUnidades(resto);               break;               case 5:    centena = "quinientos ";                       if( exacto )                           centena += "";                       else                           if( resto > 9 )                               centena += darDecenas(resto);                           else                               centena += darUnidades(resto);               break;               case 7: centena = "setecientos ";                       if( exacto )                           centena += "";                       else                           if( resto > 9 )                               centena += darDecenas(resto);                           else                               centena += darUnidades(resto);               break;               case 9: centena = "novecientos ";                       if( exacto )                           centena += "";                       else                           if( resto > 9 )                               centena += darDecenas(resto);                           else                               centena += darUnidades(resto);               break;               }                     return centena;       }             private static String darMilesimas( int n ){           String res = "";           int milesima = n/1000;           String prefijo = "";           int resto = n%1000;           boolean exacto = (n%1000 == 0);                     if( milesima == 1 )               prefijo = " mil ";           else               prefijo = darUnidades(milesima)+" mil ";                     if( exacto )               res = prefijo;           else               switch(cantidadDigitos(resto)){               case 1: res = prefijo+darUnidades(resto); break;               case 2: res = prefijo+darDecenas(resto); break;               default: res = prefijo+darCentenas(resto); break;               }                     return res;       }             private static String darDecenasMil( int n ){           String res = "";           int decMil = n/1000;           String prefijo = darDecenas(decMil)+" mil ";           int resto = n%1000;           boolean exacto = (n%1000 == 0);                     if( exacto )               res = prefijo;           else               switch(cantidadDigitos(resto)){               case 1: res = prefijo+darUnidades(resto); break;               case 2: res = prefijo+darDecenas(resto); break;               default: res = prefijo+darCentenas(resto); break;               }                     return res;       }             private static String darCentenasMil( int n ){           String res = "";           int centMil = n/1000;           String prefijo = darCentenas(centMil)+" mil ";           int resto = n%1000;           boolean exacto = (n%1000 == 0);                     if( exacto )               res = prefijo;           else               switch(cantidadDigitos(resto)){               case 1: res = prefijo+darUnidades(resto); break;               case 2: res = prefijo+darDecenas(resto); break;               case 3: res = prefijo+darCentenas(resto); break;               default: res = prefijo+darDecenasMil(resto); break;               }                     return res;       }             private static String darMillonesimas( int n ){           String res = "";           int millon = n/1000000;           String prefijo = "";           int resto = n%1000000;           boolean exacto = (n%1000000 == 0);                     if( millon == 1 )               prefijo = "un millón ";           else               switch(cantidadDigitos(millon)){               case 1: prefijo = darUnidades(millon)+" millones "; break;               case 2: prefijo = darDecenas(millon)+" millones "; break;               case 3: prefijo = darCentenas(millon)+" millones "; break;               }                         if( exacto )               res = prefijo;           else               switch(cantidadDigitos(resto)){               case 1: res = prefijo+darUnidades(resto); break;               case 2: res = prefijo+darDecenas(resto); break;               case 3: res = prefijo+darCentenas(resto); break;               case 4: res = prefijo+darDecenasMil(resto); break;               default: res = prefijo+darCentenasMil(resto); break;               }                     return res;       }   }    

    user iconAmed Ibañez Andrade on Monday, 04 August 2008, 22:48 BOT # |

  6. Lo siento pero creo que no cargo todo el código aquí les paso lo que faltaba

       centena += darUnidades(resto);               break;               case 9: centena = "novecientos ";                       if( exacto )                           centena += "";                       else                           if( resto > 9 )                               centena += darDecenas(resto);                           else                               centena += darUnidades(resto);               break;               }                      return centena;       }              private static String darMilesimas( int n ){           String res = "";           int milesima = n/1000;           String prefijo = "";           int resto = n%1000;           boolean exacto = (n%1000 == 0);                      if( milesima == 1 )               prefijo = " mil ";           else               prefijo = darUnidades(milesima)+" mil ";                      if( exacto )               res = prefijo;           else               switch(cantidadDigitos(resto)){               case 1: res = prefijo+darUnidades(resto); break;               case 2: res = prefijo+darDecenas(resto); break;               default: res = prefijo+darCentenas(resto); break;               }                      return res;       }              private static String darDecenasMil( int n ){           String res = "";           int decMil = n/1000;           String prefijo = darDecenas(decMil)+" mil ";           int resto = n%1000;           boolean exacto = (n%1000 == 0);                      if( exacto )               res = prefijo;           else               switch(cantidadDigitos(resto)){               case 1: res = prefijo+darUnidades(resto); break;               case 2: res = prefijo+darDecenas(resto); break;               default: res = prefijo+darCentenas(resto); break;               }                      return res;       }              private static String darCentenasMil( int n ){           String res = "";           int centMil = n/1000;           String prefijo = darCentenas(centMil)+" mil ";           int resto = n%1000;           boolean exacto = (n%1000 == 0);                      if( exacto )               res = prefijo;           else               switch(cantidadDigitos(resto)){               case 1: res = prefijo+darUnidades(resto); break;               case 2: res = prefijo+darDecenas(resto); break;               case 3: res = prefijo+darCentenas(resto); break;               default: res = prefijo+darDecenasMil(resto); break;               }                      return res;       }              private static String darMillonesimas( int n ){           String res = "";           int millon = n/1000000;           String prefijo = "";           int resto = n%1000000;           boolean exacto = (n%1000000 == 0);                      if( millon == 1 )               prefijo = "un millón ";           else               switch(cantidadDigitos(millon)){               case 1: prefijo = darUnidades(millon)+" millones "; break;               case 2: prefijo = darDecenas(millon)+" millones "; break;               case 3: prefijo = darCentenas(millon)+" millones "; break;               }                          if( exacto )               res = prefijo;           else               switch(cantidadDigitos(resto)){               case 1: res = prefijo+darUnidades(resto); break;               case 2: res = prefijo+darDecenas(resto); break;               case 3: res = prefijo+darCentenas(resto); break;               case 4: res = prefijo+darDecenasMil(resto); break;               default: res = prefijo+darCentenasMil(resto); break;               }                      return res;       }   }    

    user iconAmed Ibañez Andrade on Monday, 04 August 2008, 22:50 BOT # |

  7. Que bien que posteaste tu solución Amed....

    user iconCristian Denis Mamani Torres on Saturday, 09 August 2008, 00:07 BOT # |

Añadir un comentario

Tu texto de comentario

Tu nombre

Por favor ingresa el código de la imagen

Security Code