[ Foro de Javascript ]

URGENTE (Programa de numero a letras)

26-May-2021 19:20
Invitado (LUZ)
0 Respuestas

Este programa debería recibir un numero mediante un promt y después convertirlo a letras y mostrarlo en la consola.
123456789 : Ciento veintitrés millones cuatrocientos cincuenta y seis mil setecientos ochenta y nueve
sin embargo como que lee el numero al revés por que me lo regresa así:
123456789 =  NOVECIENTOS OCHENTA Y SIETE MILLONES SEISCIENTOS CINCUENTA Y CUATRO MIL TRECIENTOS VEINTIDOS PESOS
este es el código:

"use strict"

var t = "";
var numero = "";
var numeroValido = false;

var c = ["", "CIENTO","DOCIENTOS","TRECIENTOS","CUATROCIENTOS","QUINIENTOS","SEISCIENTOS","SETECIENTOS","OCHOCIENTOS","NOVECIENTOS"];
var d = ["","","","TREINTA","CUARENTA","CINCUENTA","SESENTA","SETENTA","OCHENTA","NOVENTA"];
var u = ["CERO","UN","DOS","TRES","CUATRO","CINCO","SEIS","SIETE","OCHO","NUEVE"];
var o = ["DIEZ","ONCE","DOCE","TRECE","CATORCE","QUINCE","DIECISEIS","DIECISIETE","DIECIOCHO","DIECINUEVE","VEINTIUNO","VEINTIDOS","VEINTITRES","VEINTICUATRO","VEINTICINCO","VEINTISEIS","VEINTISIETE","VEINTIOCHO","VEINTINUEVE"];

do {
 numero = prompt("Ingresa un número de 9 cífras como máximo: ", "Ingresa el número...");//Se utilza la función prompt para que el usario ingrese el número.

 if(isNaN(numero))//Se evalua si el dato ingresa es un número si no lo es se muestra una alerta
     alert("El valor ingresado no es un número entero; favor de ingresar un número entero válido.");//Se le pide al usuario que ingrese un número entero válido.
 else if(numero == null)//Se evalua si el valor ingresado es nulo
     alert("Favor de ingresar un número entero válido ; no se permiten valores nulos.");//Se le pide el usuario que ingrese un número entero válido que no sea nulo
 else if(numero.length == 0)//Se evalua si se ingreso un valor
     alert("Ingrese un número entero válido ; no se permiten valores vacíos.");//Se le pide al usuario que ingrese un número entero válido
 else if(numero.indexOf(".",0) >=0)//Se evalua si el usuario ingreso un número decimal
     alert("Favor de ingresar un número entero válido ; no se permiten números decimales.");//Se le pide al usuario que ingrese un número que no sea decimal
 else if(numero.length > 9)//Se evalua que el número ingresado no tenga mas de 9 cifras
     alert("Favor de ingresar un número entero válido ; el número no debe de pasar las 9 cifras.");//Se le pide al usuario que ingrese un número que no pase de las 9 cifras
 else
     numeroValido = true;//Si el número pasa exitosamente las evaluaciones este se considera válido
}while (!numeroValido);

numero = numero.trim();
console.log("Número Ingresado: "+ numero);//Se muestra en consola el número ingresado

//Se analiza cada 3 dígitos
for (var i=0; i<numero.length; i+=3)
{
 var x=t;
 //formamos un número de 2 dígitos
 var b=numero[i+1]!=undefined?parseFloat(numero[i+1].toString()+numero[i].toString()):parseFloat(numero[i].toString());
 //analizamos el 3er dígito
 t=numero[i+2]!=undefined?(c[numero[i+2]]+" "):"";
 t+=b<10?u[b]:(b<30?o[b-10]:(d[numero[i+1]]+(numero[i]=='0'?"":(" Y "+u[numero[i]]))));
 t=t=="CIENTO CERO"?"CIEN":t;
 if (2<i&&i<6)
   t=t=="UNO"?"MIL ":(t.replace("UNO","UN")+" MIL ");
 if (5<i&&i<9)
   t=t=="UNO"?"UN MILLÓN ":(t.replace("UNO","UN")+" MILLONES ");
 t+=x;
}
console.log(t + " PESOS");




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)