¿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í:
1er paso, descargarla:
- Version 0.1 (2007-08-07)
- Primera versión
2do paso, incluirla en donde trabajaremos.
include(ABSPATH.'/includes/numerosALetras.class.php'); /* Ahora puedes trabajar con la clase. */
- Creamos una instancia de la clase con un valor numérico, y mostramos el resultado.
$n = new numerosALetras(159); echo $n->resultado;
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.
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.
$n = new numerosALetras; echo $n->convertir(22)."<br />"; echo $n->convertir(3.1416)."<br />"; echo $n->convertir(100)."<br />"; echo $n->convertir(256)."<br />"; echo $n->convertir(512)."<br />"; echo $n->convertir(1024)."<br />";
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
- http://dns.bdat.net/php/27640.html
- http://www.blasten.com/contenidos/?id=18926
- http://www.glib.org.mx/article.php?story=20030711113025879
- http://www.gregmaclellan.com/php/numbertotext.phps
- http://pear.php.net/reference/Numbers_Words-0.9.0/Numbers_Words/Numbers_Words.html
Comentarios
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
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
Tu algoritmo es bueno, solamente es cuestion de corregir el resultado, son solo errores de dedo, echale ganas.
Espero el fin de semana hecharle un ojo a fondo en el código para solucionar ese detalle. Por el momento estaba probando esta version 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.
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
Creo que hay algún error, porque donde pones:
echo $n->convertir(256)."";en el cuadro de ejemplo el resultado es:
ciento cincuenta y seis=S