Atendendo a pedidos: segue uma rotina de exgtenso
para chama-la: EXTENSO(125.25) EXTENSO(0.25) EXTENSO(1125.25)
PROCEDURE EXTENSO(nValor) nContador, nTamanho is int cValor, cParte, cFinal is string atexto is array of 4 string agrupo is array of 4 string aunid is array of 19 string adezena is array of 9 string acentena is array of 9 string // atexto[1]="" atexto[2]="" atexto[3]="" atexto[4]="" // Define matrizes com extensos parciais aunid[1] = "UM " aunid[2] = "DOIS " aunid[3] = "TRÊS " aunid[4] = "QUATRO " aunid[5] = "CINCO " aunid[6] = "SEIS " aunid[7] = "SETE " aunid[8] = "OITO " aunid[9] = "NOVE " aunid[10] = "DEZ " aunid[11] = "ONZE " aunid[12] = "DOZE " aunid[13] = "TREZE " aunid[14] = "QUATORZE " aunid[15] = "QUINZE " aunid[16] = "DEZESSEIS " aunid[17] = "DEZESSETE " aunid[18] = "DEZOITO " aunid[19] = "DEZENOVE " // Define dezenas adezena[1] = "DEZ " adezena[2] = "VINTE " adezena[3] = "TRINTA " adezena[4] = "QUARENTA " adezena[5] = "CINQÜENTA " adezena[6] = "SESSENTA " adezena[7] = "SETENTA " adezena[8] = "OITENTA " adezena[9] = "NOVENTA " // Define centenas acentena[1] = "CENTO " acentena[2] = "DUZENTOS " acentena[3] = "TREZENTOS " acentena[4] = "QUATROCENTOS " acentena[5] = "QUINHENTOS " acentena[6] = "SEISCENTOS " acentena[7] = "SETECENTOS " acentena[8] = "OITOCENTOS " acentena[9] = "NOVECENTOS "
// Divide o valor em vários grupos cValor = NumToString(nValor, "012,2f") agrupo[1] = Middle(cValor, 1, 3) agrupo[2] = Middle(cValor, 4, 3) agrupo[3] = Middle(cValor, 7, 3) agrupo[4] = "0" + Middle(cValor, 11, 2)
// 'Processa cada grupo FOR nContador = 1 TO 4 cParte = agrupo[nContador] nTamanho = 0 IF Val(cParte)>= 1 AND Val(cParte)<10 THEN nTamanho = 1 END IF Val(cParte)>=10 AND Val(cParte)<100 THEN nTamanho = 2 END IF Val(cParte)>=100 AND Val(cParte)<1000 THEN nTamanho = 3 END IF nTamanho = 3 THEN IF Right(cParte, 2) <> "00" THEN atexto[nContador] = atexto[nContador] + acentena[Left(cParte, 1)] + "E " nTamanho = 2 ELSE IF Left(cParte,1)="1" THEN atexto[nContador] = atexto[nContador] + "CEM" ELSE atexto[nContador] = atexto[nContador] + acentena[Left(cParte, 1)] END END END IF nTamanho = 2 THEN IF Val(Right(cParte, 2)) < 20 THEN atexto[nContador] = atexto[nContador] + aunid[Right(cParte, 2)] ELSE atexto[nContador] = atexto[nContador] + adezena[Middle(cParte, 2, 1)] IF Right(cParte, 1) <> "0" THEN atexto[nContador] = atexto[nContador] + "E " nTamanho = 1 END END END IF nTamanho = 1 THEN atexto[nContador] = atexto[nContador] + aunid[Right(cParte, 1)] END END // Gera o formato final do texto IF (Val(agrupo[1]) + Val(agrupo[2] + Val(agrupo[3])) = 0 AND Val(agrupo[4]) <> 0) THEN IF Val(agrupo[4]) = 1 THEN cFinal = atexto[4] + "CENTAVO" ELSE cFinal = atexto[4] + "CENTAVOS" END ELSE cFinal = "" IF Val(agrupo[1])<>0 THEN cFinal = cFinal + atexto[1] IF Val(agrupo[1])>1 THEN cFinal = cFinal + "MILHÕES " ELSE cFinal = cFinal + "MILHÃO " END END IF Val(agrupo[2] + agrupo[3]) = 0 THEN cFinal = cFinal + "DE " ELSE IF Val(agrupo[2])<>0 THEN cFinal = cFinal + atexto[2]+"MIL " END END cFinal = cFinal + atexto[3] + "REAIS" IF Val(agrupo[4]) <> 0 THEN cFinal = cFinal + " E " + atexto[4] IF Val(agrupo[4])=1 THEN cFinal = cFinal + " CENTAVO" ELSE cFinal = cFinal + " CENTAVOS" END END END RESULT cFinal |