Inicio ¿Sidebar? RSS

¿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:

2do paso, incluirla en donde trabajaremos.

[php] include(ABSPATH.'/includes/numerosALetras.class.php'); /* Ahora puedes trabajar con la clase. */ [/php]
  1. 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
  2. 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
  3. 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

11 comentarios en ¿Como convertir Numeros a Letras con PHP?

Victor Bracco

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

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

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

Tu algoritmo es bueno, solamente es cuestion de corregir el resultado, son solo errores de dedo, echale ganas.

Victor De la Rocha

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

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

Hola. Y despues, que paso de la version actualizada, ya corregida ????

rodolfo

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

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

Mi querido Rodolfo, puedes revisar la liga http://www.sev3n.org/numerosALetras ya que me parece no esta activa. Gracias.

jose mendoza

hola no esta activa esta pagina

http://www.sev3n.org/numerosALetras

Deja un comentario

¿Cuanto es 2 + 3? =

Suscribirse a los comentarios.