Guía 20 – Transformar cifras a palabras

Las funciones de convertir cifras a palabras es un clásico en la programación.

En este caso, un desarrollador de PHPRunner me solicita un ejemplo que le permita convertir cifras a letras (inglés con dólares) y a partir de esa petición me puse a buscar en GITHUB funciones hechas en PHP que me facilitase esa funcionalidad.

He encontrado muchos códigos, pero con muy diferente calidad. Bien es cierto que he buscado las que son capaces de transformar a palabras en varios idiomas (inglés, español, etc.) porque así hacía un ejemplo que sirviera a más desarrolladores.

Al final he utilizado:

  1. https://github.com/kwn/number-to-words  (la que más me gusta)
  2. https://github.com/egy1st/Number2Text (la más sencilla de implementar)

DEMOS:

  1. https://fhumanes.com/number-to-words/
  2. https://fhumanes.com/numbers2words/

 
Este es el aspecto del ejemplo. En general es una cifra (2 decimales) y un idioma (salen los que el producto soporta) y el ejemplo, transforma esa cifra a las palabras que describen el importe.

En el caso de la clases de la opción 1 os puede salir un error, eso es porque dicha clase tiene una opción para las monedas y otra que no y he puesto el ejemplo con moneda y en ese caso no todos los idiomas están implementados, pero es fácil de resolver estos problemas (escribirme si no podéis resolverlo).

La codificación es muy sencilla. En el caso de la clase (1):

<?php

require __DIR__ . '/number-to-words_1.13/autoload.php';

use NumberToWords\NumberToWords;

$amount = $values['amount'];
$language = $values['language'];

// create the number to words "manager" class
$numberToWords = new NumberToWords();

// -----------------------  build a new number transformer using the RFC 3066 language identifier
// $numberTransformer = $numberToWords->getNumberTransformer($language);

// $values['text'] = $numberTransformer->toWords($amount); 

// ---------------------- build a new currency transformer using the RFC 3066 language identifier
$currencyTransformer = $numberToWords->getCurrencyTransformer($language);

$values['text'] = $currencyTransformer->toWords(($amount*100),'USD'); 

En el caso de la clase (2):

require_once __DIR__ . '/../MyCode/num2text/Num2Text.php';

//create an instance of Number2Text
$oTextNum = New Num2Text() ;

// set currency names
$oTextNum->setCurrency("'coin'", "'coins'", "'cent'", "'cents'"); // put the corresponding currency

// send request
$number = $values['amount'];
$language = $values['language'];
$values['text'] = $oTextNum->translateNumber($number, $language) ;

 

Como siempre os indico, para cualquier duda o problema, contactar a través de mi email [email protected].

Os dejo, para que podáis instalarlos en vuestros PC los 2 ejemplos. Deberéis seleccionar uno para vuestro proyecto. Como os he indicado, me gusta el (1), porque en español la transformación es mucho mejor.

Adjuntos

Archivo Tamaño de archivo Descargas
zip numbers2words - PHPRunner 10.4 1 MB 339
zip number-to-words - PHPRunner 10.4 2 MB 426

Blog personal para facilitar soporte gratuito a usuarios de PHPRunner