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.