¿Como convertir Numeros a Letras con PHP?
Misma pregunta que me hacía hasta hace apenas ayer u_u me puse las pilas un rato, y ¡¡¡magia!!! quedó resuelto :D trabajé un sistema de facturación improvisado
Se pretende partir de un valor numérico como en el siguiente ejemplo, conseguir su valor escrito en Letras:
- 159 = ciento cincuenta y nueve
- 22 = veinte y dos
- 3.1416 = tres con catorce decimales
Conseguí varios ejemplos, incluso uno de PHP Pear, pero no, ninguno me convenció. La mayoría por mal hechos, otros muy limitados, y los de PHP Pear por que no todos los servers lo tienen instalado /puf Todos funcionaban, pero uff lo hacían a su modo y bueeeno, valla problema lol
Y como siempre (para no perder la costumbre), tomé prestada alguna que otra línea de código ajeno para crear mi aplicación ^^ Lo convertí todo en una clase y listo, ahora puedo trabajar con mi clase algo así:
Notice: Use of undefined constant ABSPATH - assumed 'ABSPATH' in /home/misalgor/public_html/app/plugins/evalphp.plugin.php(22) : eval()'d code on line 20
Warning: include_once(ABSPATH/wp-content/uploads/numerosALetras.class.php) [function.include-once]: failed to open stream: No such file or directory in /home/misalgor/public_html/app/plugins/evalphp.plugin.php(22) : eval()'d code on line 20
Warning: include_once() [function.include]: Failed opening 'ABSPATH/wp-content/uploads/numerosALetras.class.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/misalgor/public_html/app/plugins/evalphp.plugin.php(22) : eval()'d code on line 20
1er paso, descargarla:
- Version 0.1 (2007-08-07)
- Primera versión
2do paso, incluirla en donde trabajaremos.
[php] include(ABSPATH.'/includes/numerosALetras.class.php'); /* Ahora puedes trabajar con la clase. */ [/php]- Creamos una instancia de la clase con un valor numérico, y mostramos el resultado.
[php]$n = new numerosALetras(159);
echo $n->resultado;[/php]
Aquí el resultado:
ciento cincuenta y nueve - Ahora, lo mismo que el punto anterior, pero re-utilizando la instancia de la clase para convertir y mostrar otro valor.
[php]$n = new numerosALetras(22);
echo $n->resultado."
"; echo $n->convertir(3.1416);[/php]Aquí el resultado:
veinte y dos
tres con catorce decimales - En este último ejemplo traducimos una lista de valores, utilizando la misma instancia de la clase.
[php]$n = new numerosALetras;
echo $n->convertir(22)."
"; echo $n->convertir(3.1416)."
"; echo $n->convertir(100)."
"; echo $n->convertir(256)."
"; echo $n->convertir(512)."
"; echo $n->convertir(1024)."
";[/php]El resultado:
veinte y dos
tres con catorce decimales
cien
dosciento cincuenta y seis
quinientos doce
mil veinte y cuatro
Dejo el código para quien pueda/necesite, y lo use, y si no pues sólo una miradita en el código y se diviertan criticando :)
Algunas referencias
Victor Bracco
2007-09-07 23:53:54
Creo que hay algún error, porque donde pones:
<code>echo $n->convertir(256)."";</code>
en el cuadro de ejemplo el resultado es:
<code>ciento cincuenta y seis</code> =S
No es correcto
2007-09-10 07:34:59
No es correcto: Dices
16340 es dieciseis mil trescientos cuarenta y tu algoritmo traduce diez y seis mil trescientos cuarenta
22047 es veintidos mil cuarenta y siete y tu algoritmo traduce veinte y dos mil cuarenta y siete
Victor De la Rocha
2007-09-10 11:03:35
uff! muchos errores. Gracias por su atención, veré que puedo hacer para solucionarlo.
Al menos funciona para las cantidades esperadas en el sistema de facturación que improvisé. :P
Khufus Asdruval
2007-09-14 09:40:28
Tu algoritmo es bueno, solamente es cuestion de corregir el resultado, son solo errores de dedo, echale ganas.
Victor De la Rocha
2007-09-15 14:45:42
Espero el fin de semana hecharle un ojo a fondo en el código para solucionar ese detalle. Por el momento estaba probando <a href="http://www.elticus.com/?contenido=91" rel="nofollow">esta version</a> de Juan Luis, que funciona perfecto pero no le entiendo al código nada de nada :S ademas, este código hace todo en un ciclo.
carlos
2007-10-03 22:41:14
hola amigos que bueno sus codigos pero veo que en la version de Juan Luis bueno probando con el numero 100 no me salia ningun resultado, el caso es que demora como que quiere cargar la pagina pero no sale nada asi que puse otro numero y carga normal haber pruebe gracias
Victor Bernal
2009-06-04 21:13:25
Hola. Y despues, que paso de la version actualizada, ya corregida ????
rodolfo
2009-07-25 14:59:09
Vi que tenía algún error de dedo en la función de centenas, envío el código corregido y con una pequeña modificación adaptada a "pesos" y "00/100".
Como es mucho el código de esta clase la dejo a disposicion en http://www.sev3n.org/numerosALetras
El error de dedo fue el parámetro de la función "centenas", lo cambié por:
centenas($VCentena),
así como el paraámetro de switch.
La adaptacion a pesos y 00/100 fue:
var $antes_con_despues='pesos';
var $despues = '/100 M.N.';
al comienzo de la clase y al final de esta:
$decimales = substr($decimales,strpos($decimales,'.'),4)*(100); // con 4 posiciones obtiene hasta los centavos (de centavos)p ej "21.9", con 3 obtiene "21"
así como cambiar la línea: print $this->evalua($decimales);
por: print $decimales;
rodolfo
2009-07-25 15:03:06
Vi que tenía un error en al variable del parámetro de la funcion "centenas", la cambié por "$VCentena" así como la del switch.
Jose Antonio Arzate
2009-11-13 18:18:09
Mi querido Rodolfo, puedes revisar la liga http://www.sev3n.org/numerosALetras ya que me parece no esta activa. Gracias.
jose mendoza
2010-02-27 19:28:19
hola no esta activa esta pagina
http://www.sev3n.org/numerosALetras