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
Exemplo 2005 (dois mil e cinco)
Valeu pessoal obrigado..
Abraços.. :D
Eliel_martins
Curtir tópico
+ 0
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;
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...
Obrigado...
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)