Foros del Web » Programando para Internet » Javascript »

Convertir Cantidad a letra

Estas en el tema de Convertir Cantidad a letra en el foro de Javascript en Foros del Web. Hola, tengo un campo donde debo instroducir una cantidad monetario, actualmente el usuario inserta la cantidad de esta forma: 4,550.45 es decir, el usario debe ...
  #1 (permalink)  
Antiguo 06/03/2012, 09:00
Avatar de GABRIL  
Fecha de Ingreso: febrero-2007
Mensajes: 280
Antigüedad: 17 años, 2 meses
Puntos: 4
Pregunta Convertir Cantidad a letra

Hola, tengo un campo donde debo instroducir una cantidad monetario, actualmente el usuario inserta la cantidad de esta forma: 4,550.45 es decir, el usario debe introducir correctamente toda la cantidad. Estoy manejando moneda mexicana.

Deseo dos cosas:

1.- Conoceran alguna libreria .js para convertir la cantidad introducida a un formato de moneda?? que cuando el usuario introduzca 4550.45, me devuelva: $4,550.45 o si el usuario introduce 4550, que devuelva $4,550.00

2.- Lo otro es, necesito convertir ese cantidad a letra, si el usuario coloca 4550.45, que devuelva Cuatro Mil Quininientos Ciencuenta Pesos 45/100 M.N.

Por el momento, el usuario debe ingresar esos datos forzosamente, por lo tanto necesito hacerlo mas accesible.

Gracias y espero sus comentarios.
Saludos.
__________________
"La soberbia nunca baja de donde sube, pero siempre cae de donde subió"
Francisco De Quevedo
  #2 (permalink)  
Antiguo 06/03/2012, 09:28
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Convertir Cantidad a letra

Jejeje, pedís poco! :P

Respecto a lo primero, esta librería funciona bonito: http://josscrowcroft.github.com/accounting.js/ Fijate en el demo!


Con lo segundo, encontré una función bien pequeña que hace un lindo trabajo, pero en inglés lamentablemente. Es probable que puedas convertirla a español. Tal vez no enuncie bien los números pero creo que será bastante entendible:

Código HTML:
Ver original
  1. <!doctype html>
  2.     <title>Numero a letras</title>
  3.     <script type="text/javascript">
  4.         // Convert numbers to words
  5.         // copyright 25th July 2006, by Stephen Chapman http://javascript.about.com
  6.         // permission to use this Javascript on your web page is granted
  7.         // provided that all of the code (including this copyright notice) is
  8.         // used exactly as shown (you can change the numbering system if you wish)
  9.  
  10.         // American Numbering System
  11.         var th = ['','thousand','million', 'billion','trillion'];
  12.         // uncomment this line for English Number System
  13.         // var th = ['','thousand','million', 'milliard','billion'];
  14.  
  15.         var dg = ['zero','one','two','three','four', 'five','six','seven','eight','nine'];
  16.         var tn = ['ten','eleven','twelve','thirteen', 'fourteen','fifteen','sixteen', 'seventeen','eighteen','nineteen'];
  17.         var tw = ['twenty','thirty','forty','fifty', 'sixty','seventy','eighty','ninety'];
  18.         function toWords(s){s = s.toString(); s = s.replace(/[\, ]/g,''); if (s != parseFloat(s)) return 'not a number'; var x = s.indexOf('.'); if (x == -1) x = s.length; if (x > 15) return 'too big'; var n = s.split(''); var str = ''; var sk = 0; for (var i=0; i < x; i++) {if ((x-i)%3==2) {if (n[i] == '1') {str += tn[Number(n[i+1])] + ' '; i++; sk=1;} else if (n[i]!=0) {str += tw[n[i]-2] + ' ';sk=1;}} else if (n[i]!=0) {str += dg[n[i]] +' '; if ((x-i)%3==0) str += 'hundred ';sk=1;} if ((x-i)%3==1) {if (sk) str += th[(x-i-1)/3] + ' ';sk=0;}} if (x != s.length) {var y = s.length; str += 'point '; for (var i=x+1; i<y; i++) str += dg[n[i]] +' ';} return str.replace(/\s+/g,' ');}
  19.     </script>
  20.    
  21.     <script type="text/javascript">
  22.          function mostrarNumero(elem){
  23.             var texto = toWords(elem.value);
  24.             document.getElementById('mostrarAca').innerHTML = texto;
  25.          }
  26.     </script>
  27. </head>
  28.     <input type="text" onkeyup="mostrarNumero(this)" />
  29.     <p id="mostrarAca"></p>
  30. </body>
  31. </html>

El script que puse primero es mejor si lo ponés en un archivo externo, dejándo el texto comentado. No quites las fuentes ni el autor!
__________________
nahueljose.com.ar
  #3 (permalink)  
Antiguo 06/03/2012, 09:37
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Convertir Cantidad a letra

Parece que ya se había tratado acá en el foro. Este código funciona bastante bien:

Código HTML:
Ver original
  1. var o=new Array("diez", "once", "doce", "trece", "catorce", "quince", "dieciséis", "diecisiete", "dieciocho", "diecinueve", "veinte", "veintiuno", "veintidós", "veintitrés", "veinticuatro", "veinticinco", "veintiséis", "veintisiete", "veintiocho", "veintinueve");
  2. var u=new Array("cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve");
  3. var d=new Array("", "", "", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa");
  4. var c=new Array("", "ciento", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos");
  5.  
  6. function nn(n)
  7. {
  8.   var n=parseFloat(n).toFixed(2); /*se limita a dos decimales, no sabía que existía toFixed() :)*/
  9.   var p=n.toString().substring(n.toString().indexOf(".")+1); /*decimales*/
  10.   var m=n.toString().substring(0,n.toString().indexOf(".")); /*número sin decimales*/
  11.   var m=parseFloat(m).toString().split("").reverse(); /*tampoco que reverse() existía :D*/
  12.   var t="";
  13.  
  14.   /*Se analiza cada 3 dígitos*/
  15.   for (var i=0; i<m.length; i+=3)
  16.  {
  17.    var x=t;
  18.    /*formamos un número de 2 dígitos*/
  19.    var b=m[i+1]!=undefined?parseFloat(m[i+1].toString()+m[i].toString()):parseFloat(m[i].toString());
  20.    /*analizamos el 3 dígito*/
  21.    t=m[i+2]!=undefined?(c[m[i+2]]+" "):"";
  22.    t+=b<10?u[b]:(b<30?o[b-10]:(d[m[i+1]]+(m[i]=='0'?"":(" y "+u[m[i]]))));
  23.    t=t=="ciento cero"?"cien":t;
  24.    if (2<i&&i<6)
  25.      t=t=="uno"?"mil ":(t.replace("uno","un")+" mil ");
  26.    if (5<i&&i<9)
  27.      t=t=="uno"?"un millón ":(t.replace("uno","un")+" millones ");
  28.    t+=x;
  29.    //t=i<3?t:(i<6?((t=="uno"?"mil ":(t+" mil "))+x):((t=="uno"?"un millón ":(t+" millones "))+x));
  30.  }
  31.  
  32.  t+=" con "+p+"/100";
  33.  /*correcciones*/
  34.  t=t.replace("  "," ");
  35.  t=t.replace(" cero","");
  36.  //t=t.replace("ciento y","cien y");
  37.  //alert("Numero: "+n+"\nNº Dígitos: "+m.length+"\nDígitos: "+m+"\nDecimales: "+p+"\nt: "+t);
  38.  //document.getElementById("esc").value=t;
  39.  return t;
  40. }
  41.  
  42. function st()
  43. {
  44.  var t="<table><tr><th>número</th><th>escrito</th></tr>";
  45.   for (var i=2; i<1000000; i+=892.45)
  46.    t+="<tr><td>"+i.toFixed(2)+"</td><td>"+nn(i)+"</td></tr>";
  47.   t+="</table>";
  48.   document.getElementById('out').innerHTML=t;
  49. }
  50. window.onload=st;
  51. <!--numero: <input id="num"><input type="button" value="C" onclick="nn(document.getElementById('num').value);"><br>
  52. escrito: <input style="width: 40em;" id="esc">-->
  53. <div id="out"></div>
  54. </body>
  55. </html>

Tema: http://www.forosdelweb.com/f13/pregu...-texto-417787/
__________________
nahueljose.com.ar
  #4 (permalink)  
Antiguo 06/03/2012, 13:33
Avatar de GABRIL  
Fecha de Ingreso: febrero-2007
Mensajes: 280
Antigüedad: 17 años, 2 meses
Puntos: 4
Respuesta: Convertir Cantidad a letra

Genial, muchas gracias, ambas librerias me estan sirviendo mucho, se les agradece.
Saludos.
__________________
"La soberbia nunca baja de donde sube, pero siempre cae de donde subió"
Francisco De Quevedo
  #5 (permalink)  
Antiguo 19/10/2015, 22:19
 
Fecha de Ingreso: octubre-2015
Mensajes: 3
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Convertir Cantidad a letra

Saben como remover personajes especiales como ","? Trato de insertar el codigo pero no lo he logrado.

Gracias!

Etiquetas: cantidad, js, letra
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 10:00.