diff --git a/README.md b/README.md index d6d4f2f..4b7fd84 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ require 'vendor/autoload.php'; use Luecano\NumeroALetras\NumeroALetras; ``` -### Convertir un número a letras +### Convertir un número a letras o palabras ```php $formatter = new NumeroALetras; @@ -55,6 +55,23 @@ Parámetros: - string `$cents` (opcional) Establece el nombre o código para la parte decimal, valor por defecto es string vacío. +### Convertir un número a letras en formato libre + +```php +$formatter = new NumeroALetras; +echo $formatter->toString($number, $decimals, $whole_str, $decimal_str); +``` + +Parámetros: + +- integer|float `$number` (requerido) El número a convertir. + +- integer `$decimals` (opcional) Establece el número de puntos decimales, valor por defecto es 2. + +- string `$whole_str` (opcional) Establece el texto para la parte entera, valor por defecto es string vacío. + +- string `$decimal_str` (opcional) Establece el texto para la parte decimal, valor por defecto es string vacío. + ### Convertir un número a letras en formato de facturación electrónica SUNAT ```php @@ -97,6 +114,14 @@ echo $formatter->toWords(1100); //MIL CIEN ``` +```php +$formatter = new NumeroALetras; +$formatter->apocope = true; +echo $formatter->toWords(101) . ' AÑOS'; + +//CIENTO UN AÑOS +``` + ```php echo (new NumeroALetras)->toMoney(2500.90, 2, 'DÓLARES', 'CENTAVOS'); @@ -112,25 +137,24 @@ echo $formatter->toMoney(10.10, 2, 'SOLES', 'CENTIMOS'); ```php $formatter = new NumeroALetras; -echo $formatter->toInvoice(1700.50, 2, 'soles'); +$formatter->conector = 'Y'; +echo $formatter->toMoney(11.10, 2, 'pesos', 'centavos'); -//MIL SETECIENTOS CON 50/100 SOLES +//ONCE PESOS Y DIEZ CENTAVOS ``` ```php $formatter = new NumeroALetras; -$formatter->apocope = true; -echo $formatter->toWords(101) . ' AÑOS'; +echo $formatter->toInvoice(1700.50, 2, 'soles'); -//CIENTO UN AÑOS +//MIL SETECIENTOS CON 50/100 SOLES ``` ```php $formatter = new NumeroALetras; -$formatter->conector = 'Y'; -echo $formatter->toMoney(11.10, 2, 'pesos', 'centavos'); +echo $formatter->toString(5.2, 1, 'años', 'meses'); -//ONCE PESOS Y DIEZ CENTAVOS +//CINCO AÑOS CON DOS MESES ``` ### Documentación v1.4 diff --git a/src/NumeroALetras.php b/src/NumeroALetras.php index 8beab40..4f6aaf6 100644 --- a/src/NumeroALetras.php +++ b/src/NumeroALetras.php @@ -115,19 +115,33 @@ public function toMoney($number, $decimals = 2, $currency = '', $cents = '') $splitNumber = explode('.', $number); - $splitNumber[0] = $this->wholeNumber($splitNumber[0]) . ' ' . strtoupper($currency); + $splitNumber[0] = $this->wholeNumber($splitNumber[0]) . ' ' . mb_strtoupper($currency, 'UTF-8'); if (!empty($splitNumber[1])) { $splitNumber[1] = $this->convertNumber($splitNumber[1]); } if (!empty($splitNumber[1])) { - $splitNumber[1] .= ' ' . strtoupper($cents); + $splitNumber[1] .= ' ' . mb_strtoupper($cents, 'UTF-8'); } return $this->glue($splitNumber); } + /** + * Formatea y convierte un número a letras en formato libre + * + * @param integer|float $number + * @param integer $decimals + * @param string $whole_str + * @param string $decimal_str + * @return string + */ + public function toString($number, $decimals = 2, $whole_str = '', $decimal_str = '') + { + return $this->toMoney($number, $decimals, $whole_str, $decimal_str); + } + /** * Formatea y convierte un número a letras en formato facturación electrónica * @@ -152,7 +166,7 @@ public function toInvoice($number, $decimals = 2, $currency = '') $splitNumber[1] = '00/100 '; } - return $this->glue($splitNumber) . strtoupper($currency); + return $this->glue($splitNumber) . mb_strtoupper($currency, 'UTF-8'); } /** @@ -192,7 +206,7 @@ private function wholeNumber($number) */ private function glue($splitNumber) { - return implode(' ' . strtoupper($this->conector) . ' ', array_filter($splitNumber)); + return implode(' ' . mb_strtoupper($this->conector, 'UTF-8') . ' ', array_filter($splitNumber)); } /** diff --git a/tests/NumeroALetrasTest.php b/tests/NumeroALetrasTest.php index 61b3319..7493b05 100644 --- a/tests/NumeroALetrasTest.php +++ b/tests/NumeroALetrasTest.php @@ -60,4 +60,10 @@ public function testConector() $formatter->conector = 'Y'; $this->assertEquals('DIEZ PESOS Y DIEZ CENTAVOS', $formatter->toMoney(10.10, 2, 'pesos', 'centavos')); } + + public function testToString() + { + $formatter = new NumeroALetras; + $this->assertEquals('CINCO AÑOS CON DOS MESES', $formatter->toString(5.2, 1, 'años', 'meses')); + } }