GARANTIR DESCONTO

Fórum Ano por extenso #339024

20/03/2007

0

Gostaria de saber se alguem tem algum componente que retorne um ano por extenso ou alguma função pronta ?.

Exemplo 2005 (dois mil e cinco)


Valeu pessoal obrigado..


Abraços.. :D


Eliel_martins

Eliel_martins

Responder

Posts

20/03/2007

Denis

Vai ficar uma zona colado aqui, mas se quiser me passe o seu e-mail e posso te mandar lá. Mas em todo caso aí vai.

Antes de mais nada, estas funções servem para gerar um número por extenso em valor. Vou deixar os dados da função original porque deve servir para mais gente. Mas para trazer o numero sem centavos e moedas basta retirar na função onde ele acrescenta a string.


const
Unidades: array[1..19] of TNumeroStr = (´um´, ´dois´, ´três´, ´quatro´,´cinco´, ´seis´, ´sete´, ´oito´, ´nove´, ´dez´, ´onze´, ´doze´,
´treze´, ´quatorze´, ´quinze´, ´dezesseis´, ´dezessete´, ´dezoito´,´dezenove´);
Dezenas: array[1..9] of TNumeroStr = (´dez´, ´vinte´, ´trinta´, ´quarenta´,´cinqüenta´, ´sessenta´, ´setenta´, ´oitenta´, ´noventa´);
Centenas: array[1..9] of TNumeroStr = (´cem´, ´duzentos´, ´trezentos´,´quatrocentos´, ´quinhentos´, ´seiscentos´, ´setecentos´, ´oitocentos´,´novecentos´);
ErrorString = ´Valor fora da faixa´;
Min = 0.01;
Max = 4294967295.99;
Moeda = ´ real ´;
Moedas = ´ reais ´;
Centesimo = ´ centavo ´;
Centesimos = ´ centavos ´;




function NumeroParaExtenso(parmNumero: Real): string;
begin
if (parmNumero >= Min) and (parmNumero <= Max) then
begin
{Tratar reais}
Result := ConversaoRecursiva(Round(Int(parmNumero)));
if Round(Int(parmNumero)) = 1 then
Result := Result + Moeda // basta tirar aqui moeda e vem o valor puro
else if Round(Int(parmNumero)) <> 0 then
Result := Result + Moedas; // basta tirar aqui moedas e vem o valor puro
{Tratar centavos}
if not(Frac(parmNumero) = 0.00) then
begin
if Round(Int(parmNumero)) <> 0 then
Result := Result + ´ e ´;
Result := Result + ConversaoRecursiva(Round(Frac(parmNumero) * 100));
if (Round(Frac(parmNumero) * 100) = 1) then
Result := Result + centesimo // basta tirar aqui centesimo e vem o valor puro
else
Result := Result + centesimos; // basta tirar aqui centesimos e vem o valor puro
end;
end else
raise ERangeError.CreateFmt(´¬g ´ + ErrorString + ´ ¬g..¬g´,[parmNumero, Min, Max]);
end;



function ConversaoRecursiva(N: LongWord): string;
begin
case N of
1..19: Result := Unidades[N];
20, 30, 40, 50, 60, 70, 80, 90: Result := Dezenas[N div 10] + ´ ´;
21..29, 31..39, 41..49, 51..59, 61..69, 71..79, 81..89, 91..99: Result := Dezenas[N div 10] + ´ e ´ + ConversaoRecursiva(N mod 10);
100, 200, 300, 400, 500, 600, 700, 800, 900: Result := Centenas[N div 100] + ´ ´;
101..199: Result := ´ cento e ´ + ConversaoRecursiva(N mod 100);
201..299, 301..399, 401..499, 501..599, 601..699, 701..799, 801..899, 901..999: Result := Centenas[N div 100] + ´ e ´ + ConversaoRecursiva(N mod 100);
1000..999999: Result := ConversaoRecursiva(N div 1000) + ´ mil ´ + ConversaoRecursiva(N mod 1000);
1000000..1999999: Result := ConversaoRecursiva(N div 1000000) + ´ milhão ´+ ConversaoRecursiva(N mod 1000000);
2000000..999999999: Result := ConversaoRecursiva(N div 1000000) + ´ milhões ´+ ConversaoRecursiva(N mod 1000000);
1000000000..1999999999: Result := ConversaoRecursiva(N div 1000000000) + ´ bilhão ´ + ConversaoRecursiva(N mod 1000000000);
2000000000..4294967295: Result := ConversaoRecursiva(N div 1000000000) + ´ bilhões ´ + ConversaoRecursiva(N mod 1000000000);
end;
end;


Responder

Gostei + 0

20/03/2007

Eliel_martins

Valeu Denis, obrigado... consegui utilizar esta função mesmo...

Obrigado...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar