Ayuda con un problema...

Iniciado por Zero_1, 22 Noviembre 2007, 18:05 PM

0 Miembros y 1 Visitante están viendo este tema.

Zero_1

hola; necesito imprimir una moneda asi:
ejemplo:

si ingreso
$432.22

y que en la impresion salga
*******Cuatrocientos Treinta y Dos con 22/100*******


alguien sabe la respuesta???


gracias...

egyware

mmm
no es tan dificil como uno lo piensa
primero create una clase para eso
segundo a un metodo pasale tu numero
luego separa las unidades, decimas, y centecimas....(ejemplo 400 10 1 ....) y
luego las comparas y en un String guardas tu resultado
tienes tu numero 458
lo divides por 100
458/100= 4.58 -> guardas solo el numero entero por ejeplo en int centena;
luego le restas centena*100 y te queda
numero - centena*100 =58
luego tu nuevo numero que te queda lo divides por 10
58/10 = 5.8 -> guardas solo el numero entero en int decena
y haces lo mismo le restas decena * 10 y te quedara 8 y lo guardas
luego con if o switch comparas centenas, decenas y unidades comparas para que tomen sus respectivos nombre
ej
switch(decena){
case 1:
String Wordnum = Wordnum + "Diez";
.....
y haces lo mismo
con los decimales no se me ocurrio pero puedes hacer algo parecido
espero que te aya ayudado y cuando tengas la clase subela porfa como pa verla y como te a queda tu creacion
xaaauuuu
suerte

Hearts

Eso esta muy bien y creo que es la unica manera, aunque el creo que quiere que al insertar un valor se lo muestre como cadena y no tener que poner tu "a mano" en el codigo que 10 es "diez".

Pero bueno como te dijeron arriba asi es una forma y encontre por google un codigo mas o menos orientativo:

    public class conversionNumeroEnCadena {
    private int flag;
    public int numero;
    public String num;
    public String num_letra;
    public String num_letras;
    public String num_letram;
   
    public conversionNumeroEnCadena(){
    numero = 0;
    flag=0;
    }
    public conversionNumeroEnCadena(int n){
    numero = n;
    flag=0;
    }
   
   
        private String unidad(int numero){
   
    switch (numero){
    case 9:
    num = "nueve";
    break;
    case 8:
    num = "ocho";
    break;
    ...........
    ...........
   
    case 2:
    num = "dos";
    break;
    case 1:
    if (flag == 0)
num = "uno";
    else
num = "un";
    break;
    case 0:
    num = "";
    break;
    }
    return num;
    }
   
    private String decena(int numero){
   
    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));
    }
   
    ...........
    ...........
   
    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 19:
   
    num_letra = "diecinueve ";
    break;
   
    }
    }
    else
    num_letra = unidad(numero);
   
    return num_letra;
    }
   
    private String centena(int numero){
    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 >= 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;
    }
   
    private String miles(int numero){
    if (numero >= 1000 && numero <2000){
    num_letram =
    ("mil ").concat(centena(numero%1000));
    }
    if (numero >= 2000 && numero <10000){
    flag=1;
    num_letram =
    unidad(numero/1000).concat("mil").concat
    (centena(numero%1000));
    }
    if (numero < 1000)
    num_letram = centena(numero);
   
    return num_letram;
}
   
   
    public String convertirLetras(int numero){
    num_letras = miles(numero);
    return num_letras;
    }
    }


De Santana

salu2

Zero_1

Cita de: Hearts en 22 Noviembre 2007, 20:35 PM
    public class conversionNumeroEnCadena {
    private int flag;
    public int numero;
    public String num;
    public String num_letra;
    public String num_letras;
    public String num_letram;
   
    public conversionNumeroEnCadena(){
    numero = 0;
    flag=0;
    }
    public conversionNumeroEnCadena(int n){
    numero = n;
    flag=0;
    }
   
   
        private String unidad(int numero){
   
    switch (numero){
    case 9:
    num = "nueve";
    break;
    case 8:
    num = "ocho";
    break;
    ...........
    ...........
   
    case 2:
    num = "dos";
    break;
    case 1:
    if (flag == 0)
num = "uno";
    else
num = "un";
    break;
    case 0:
    num = "";
    break;
    }
    return num;
    }
   
    private String decena(int numero){
   
    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));
    }
   
    ...........
    ...........
   
    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 19:
   
    num_letra = "diecinueve ";
    break;
   
    }
    }
    else
    num_letra = unidad(numero);
   
    return num_letra;
    }
   
    private String centena(int numero){
    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 >= 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;
    }
   
    private String miles(int numero){
    if (numero >= 1000 && numero <2000){
    num_letram =
    ("mil ").concat(centena(numero%1000));
    }
    if (numero >= 2000 && numero <10000){
    flag=1;
    num_letram =
    unidad(numero/1000).concat("mil").concat
    (centena(numero%1000));
    }
    if (numero < 1000)
    num_letram = centena(numero);
   
    return num_letram;
}
   
   
    public String convertirLetras(int numero){
    num_letras = miles(numero);
    return num_letras;
    }
    }


De Santana

salu2

tambien habia encontrado ese codigo; igual mi problema es con los decimales;
no logro escribir el "**** con 32/100 *****

Aun asi gracias

PD.: egyware, "mi creacion" te la debo ya que asi no es lo que necesito pero gracias por el aporte

egyware

 :huh: :huh:

tu tienes problema al sacar los decimales  :-(
mmmm
loading...
se ve dificil pero se me ocurio algo
tienes tu decimal .xxxx
lo multiplicas por diez y te queda x.xxx
(la idea es dejarlo sin decimales)
luego compruebas los decimales restantes sean mayores a 1
sino
lo vuelves a multiplicar por 10 hasta que no quedes con decimales,
cuando no quedes con decimales y quedes con un numero algo asi xxxx.0
ldebes saber cuantas veces sera que multiplicaste por 10 (para eso deberias haber guardado en un int)que ese numero sera el exponencial de tu denominador en este caso seria algo asi

***** xxxx/10n **** y n es la cantidad de decimales

espero que te sirva xauu
suerte

PS:No te servira con decimales periodicos ya que la division es x/9 y en la básica(o primaria en otros paises) jamas aprendi como hacerlo  :-( :D :D :D :xD :xD
:¬¬



Zero_1

    al ver mi error un poco lo que hice fue  agarrar el numero flotante y restarle la parte entera de este y guardar el resultado e imprimirlo con el DecimalFormat

DecimalFormat formato = new DecimalFormat(".##");

sn = valor;
num = (float)sn;
    iPart = (int) num;
    fPart = num - iPart;


ejemplo:
453.21 = valor

entonces mi respuesta me daba 0.21 y el DecimalFormat me lo puso a .21
y solo coloque este resultado; gracias a todos x la ayuda