Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/03/2012, 09:37
Avatar de Naahuel
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