Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] escribir los números con letras

Estas en el tema de escribir los números con letras en el foro de Java en Foros del Web. Hola amigos necesito tomar un número y escribirlo con letras: Ejemplo: tengo 10 y escribir diez tengo 65 y escribir sesenta y cinco Existe algo ...
  #1 (permalink)  
Antiguo 24/02/2016, 10:33
 
Fecha de Ingreso: agosto-2015
Ubicación: La Habana
Mensajes: 72
Antigüedad: 8 años, 8 meses
Puntos: 4
escribir los números con letras

Hola amigos necesito tomar un número y escribirlo con letras:
Ejemplo:
tengo 10 y escribir diez
tengo 65 y escribir sesenta y cinco

Existe algo implementado que me resuelva el problema?

Gracias de antemano.
  #2 (permalink)  
Antiguo 24/02/2016, 16:18
 
Fecha de Ingreso: agosto-2015
Ubicación: La Habana
Mensajes: 72
Antigüedad: 8 años, 8 meses
Puntos: 4
Respuesta: escribir los números con letras

Hola amigos, acabo de solucionar el problema ahí va la clase de un amigo a la cual le hice algunos cambios. Espero les sirva...
Cita:
package cimex.ice.tools;
import java.util.regex.Pattern;
/**
* @web http://jc-mouse.blogspot.com/
* @author Mouse
* ENHANCED BY @OSMAYM
*/
public class NumeroALetra {

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 ", "veintinun ", "veintidos ", "veintitres ", "veinticuatro ", "veinticinco ", "veintiseis ", "veintisiete ", "veintiocho ", "veintinueve ", "treinta ", "cuarenta ",
"cincuenta ", "sesenta ", "setenta ", "ochenta ", "noventa "};
private final String[] CENTENAS = {"", "ciento ", "doscientos ", "trecientos ", "cuatrocientos ", "quinientos ", "seiscientos ",
"setecientos ", "ochocientos ", "novecientos "};

public NumeroALetra() {
}

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 + ",0";
}
//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(",");
literal = ConvertirNumero(Num[0], mayusculas);
parte_decimal = ConvertirNumero(Num[1], mayusculas);
//devuelve el resultado en mayusculas o minusculas
if(parte_decimal.toUpperCase().equals("CERO"))
{
if (mayusculas)
{
return literal.toUpperCase();
}
else
{
return literal;
}
}
else
{
if (mayusculas)
{
return (literal+" PUNTO "+parte_decimal).toUpperCase();
}
else
{
return (literal+" PUNTO "+parte_decimal) ;
}
}

} else {//error, no se puede convertir
return literal = null;
}
}
/* convertir la parte numero*/
public String ConvertirNumero(String numero, boolean mayusculas) {
String literal = "";

//se valida formato de entrada -> 999 999 999
if (Pattern.matches("\\d{1,9}", numero)) {
//se divide el numero 0000000,00 -> entero y decimal
String Num[] = new String[1];
Num[0] = numero;
//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.toUpperCase();
} else {
return literal;
}
} 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
if(n == 20)
return DECENAS[Integer.parseInt(num.substring(0, 1)) + 8];
else return DECENAS[Integer.parseInt(num.substring(0, 1)) + 17];
}
else if(n > 20 && n < 30)
{
return DECENAS[Integer.parseInt(num.substring(0, 1)) + 8 + Integer.parseInt(num.substring(num.length() - 1))];
}
else {
return DECENAS[Integer.parseInt(num.substring(0, 1)) + 17] + "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);
if(n == null ? "un " == null : n.equals("un "))
return "mil " + getCentenas(c);
else 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);
}
}
para utilizarla:
Cita:
//-------------------------------
NumeroALetra NumLetra = new NumeroALetra();
return NumLetra.Convertir(¨1328¨,true);
//
y muestra mil treciento veintiocho

Etiquetas: letras
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:27.