Fórum Escrever numeros por extenso #138720
19/02/2003
0
Como faço para escrever o numero por extenso
Uilian Gurjon
Uiliangurjon
Curtir tópico
+ 0Posts
19/02/2003
Marcelo.c
Gostei + 0
19/02/2003
Marcelo.c
Gostei + 0
20/02/2003
Dor_poa
var
i, centena, dezena, unidade : integer;
valor, monta, extenso : string;
begin
extenso:=´´;
if literal=0.00 then
result:=´zero´
else
begin
valor:=FormatFloat(´000000000000.00´,literal);
i:=1;
while i<=13 do
begin
if (Pos(valor[i],´0123456789´)=0) then valor[i ] := ´0´;
if (Pos(valor[i+1],´0123456789´)=0) then valor[i+1] := ´0´;
if (Pos(valor[i+2],´0123456789´)=0) then valor[i+2] := ´0´;
if (i=13) then
centena:=0
else
centena := StrToInt(valor[i]);
dezena := StrToInt(valor[i+1]);
if dezena>1 then
unidade := StrToInt(valor[i+2])
else
unidade := StrToInt(copy(valor,(i+1),2));
if (((i=13) and (StrToFloat(copy(valor,14,2))>0.01)) and ((StrToFloat(copy(valor,1,12)))<>0.00)) then
extenso:=Trim(extenso)+´ e´;
monta:=´duzentos trezentos quatrocentosquinhentos seiscentos setecentos oitocentos novecentos´;
if ((dezena+unidade)=0) then
monta:=´ cem ´+monta
else
monta:=´ cento ´+monta;
extenso:=Trim(extenso)+´ ´+Trim(copy(monta,((centena*12)+1),12));
if ((centena<>0) and ((dezena+unidade)>0)) then
extenso:=Trim(extenso)+´ e´;
monta:=´ vinte trinta quarenta cincoentasessenta setenta oitenta noventa´;
extenso:=Trim(extenso)+´ ´+Trim(copy(monta,((dezena*9)+1),9));
if ((dezena>1) and (unidade>0)) then
extenso:=Trim(extenso)+´ e´;
monta:=´ um dois tres quatro cinco seis sete oito nove dez onze doze treze quatorze quinze dezeseis dezesete dezoito dezenove´;
extenso:=Trim(extenso)+´ ´+Trim(copy(monta,((unidade*9)+1),9));
if ((centena+dezena+unidade)>0) then
begin
if i=1 then
if (((centena+dezena)=0) and (unidade<=1)) then
extenso:=Trim(extenso)+´ bilhão´
else
extenso:=Trim(extenso)+´ bilhões´;
if (i=4) then
if ((centena+dezena=0) and (unidade<=1))then
extenso:=Trim(extenso)+´ milhão´
else
extenso:=Trim(extenso)+´ milhões´;
if i=7 then
extenso:=Trim(extenso)+´ mil´;
if ((i<10) and (StrToFloat(copy(valor,(i+3),(13-i)))>1.00))then
extenso:=extenso+´ e´;
end;
if ((i=1) and (StrToFloat(copy(valor,4,9))=0.00) and ((centena+unidade+dezena)<>0)) then
extenso:=Trim(extenso)+´ de´;
if ((i=4) and (StrToFloat(copy(valor,7,6))=0.00) and ((centena+unidade+dezena)<>0)) then
extenso:=Trim(extenso)+´ de´;
if ((i=10) and (StrToFloat(copy(valor,1,12))<>0.00)) then
if (StrToFloat(copy(valor,1,12))=1.00) then
extenso:=Trim(extenso)+´ real´
else
extenso:=Trim(extenso)+´ reais´;
if ((i=13) and ((dezena+unidade)<>0)) then
if ((dezena+unidade)=1) then
extenso:=Trim(extenso)+´ centavo´
else
extenso:=Trim(extenso)+´ centavos´;
i:=i+3;
end;
if literal<0.00 then extenso:=Trim(extenso)+´ negativo´;
if (literal<1.0) then
if (StrToInt(copy(valor,14,2))=1) then
extenso:=Trim(extenso)+´ de real´ // ´de real/de reais´ podem ser substituidos por campos de arquivos de parametros
else // o que dá mais flexibilidade, caso aconteçam mais planos econômicos.
extenso:=Trim(extenso)+´ de reais´;
result:=extenso;
end;
end;
Gostei + 0
06/07/2004
Rômulo Barros
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)