Inteiro Para String (Dezenas e Unidades)


Resumo
Assunto Inteiro para string (Dezenas e Unidades)
Linguagem: PHP
Autor:
Download

Estava a fazer um script para emitir facturas quando me deparei sobre este assunto ao aperceber-me que tinha que meter as quantias numericamente e por extenso. Pus-me então a fazer esta função:

function moneyToText($ammount) {
     $out = "";
     $tenths = array("2"=>"Vinte", "Trinta", "Quarenta", "Cinquenta", "Sessenta", "Setenta", "Oitenta", "Noventa");
     $units = array("Zero", "Um", "Dois", "Três", "Quatro", "Cinco", "Seis", "Sete", "Oito", "Nove");
     $special = array("10"=>"Dez", "Onze", "Doze", "Treze", "Catorze", "Quinze", "Dezasseis", "Dezassete", "Dezoito", "Dezanove");
     if ($ammount < 10) {
         $out = $units[$ammount];
     } elseif ($ammount < 20) {
         $out = $special[$ammount];
     } else {
         $tenth = floor($ammount/10);
         $out .= $tenths[$tenth];
         $unit = fmod($ammount, 10);
         if ($unit != 0) {
             $out .=' e '. $units[$unit];
         }
     }

     return $out;
}

A língua portuguesa é bastante complexa, é sabido, no que toca aos números também particularmente na questão dos plurais e singulares - Ao contrário do inglês em que para se dizer 1.000.000 se diz one million e para 2.000.000 se diz two million em português diz-se um milhão, dois milhões. Mas isso é ultrapassável. Nesta função fiquei-me pelas dezenas, porque não valia a pena estar a ter mais trabalho. Basicamente funciona assim:

- Se o número for menor que 10 limita-se a associar o valor textual
- Se for menor que 20 e como os números de 10 a 20 diferem dos restantes volta a devolver o seu valor textual
- Se for um número maior há que começar por determinar o valor textual do algarismo das dezenas. De seguida determina-se o valor do algarismo das unidades fazendo o resto da divisão do número por 10. Se o número for diferente de 0 concatena-se à string que já tem o número das unidades a letra 'e' seguida do valor textual do algarismo das unidades.

Aqui pode-se encontrar um exemplo deste script a funcionar escrevendo os números de 0 a 99.

JRomão | Contacto | Termos de Uso
© 2009 - 2012 JRomão

Download Opera - World's fastest and most secure Web browser.