Ir para conteúdo
Fórum Script Brasil
  • 0

"Mini extensos". Urgente


petini

Pergunta

Olá pessoal,

um ótimo 2009, repleto de tudo de bom (saúde, paz, amor, dinheiro, realizações, etc) para todos.

mudando de gato prá sapato, eu preciso de uma "mini função" que retorne por extenso um número ordinário e inteiro, de 0 'a 99.

ví inúmeras funções de extensos, mas todas elas são enormes (vão até bilhões) e em moedas (Reais, etc).

preciso de algo bem simples e sem valores.

alguém tem ? obrigado. eulício.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Tem aqui uma função que você pode adptar.

unit Ext;



interface

function extenso (valor: real): string;



implementation



uses

SysUtils,  Dialogs;





function extenso (valor: real): string;

var

Centavos, Centena, Milhar, Milhao, Texto, msg: string;

const

Unidades: array[1..9] of string = ('Um', 'Dois', 'Tres', 'Quatro', 'Cinco',

                                   'Seis', 'Sete', 'Oito', 'Nove');

Dez: array[1..9] of string = ('Onze', 'Doze', 'Treze', 'Quatorze', 'Quinze',

                              'Dezesseis', 'Dezessete', 'Dezoito', 'Dezenove');

Dezenas: array[1..9] of string = ('Dez', 'Vinte', 'Trinta', 'Quarenta',

                                  'Cinquenta', 'Sessenta', 'Setenta',

                                  'Oitenta', 'Noventa');

Centenas: array[1..9] of string = ('Cento', 'Duzentos', 'Trezentos',

                                   'Quatrocentos', 'Quinhentos', 'Seiscentos',

                                   'Setecentos', 'Oitocentos', 'Novecentos');



function ifs(Expressao: Boolean; CasoVerdadeiro, CasoFalso: String): String;

begin

if Expressao

then Result:=CasoVerdadeiro

else Result:=CasoFalso;

end;



function MiniExtenso (trio: string): string;

var

Unidade, Dezena, Centena: string;

begin

Unidade:='';

Dezena:='';

Centena:='';

if (trio[2]='1') and (trio[3]<>'0') then

begin

Unidade:=Dez[strtoint(trio[3])];

Dezena:='';

end

else

begin

if trio[2]<>'0' then Dezena:=Dezenas[strtoint(trio[2])];

if trio[3]<>'0' then Unidade:=Unidades[strtoint(trio[3])];

end;

if (trio[1]='1') and (Unidade='') and (Dezena='')

then Centena:='cem'

else

if trio[1]<>'0'

then Centena:=Centenas[strtoint(trio[1])]

else Centena:='';

Result:= Centena + ifs((Centena<>'') and ((Dezena<>'') or (Unidade<>'')), ' e ', '')

         + Dezena + ifs((Dezena<>'') and (Unidade<>''),' e ', '') + Unidade;

end;



begin

if (valor>999999.99) or (valor<0) then

begin

msg:='O valor está fora do intervalo permitido.';

msg:=msg+'O número deve ser maior ou igual a zero e menor que 999.999,99.';

msg:=msg+' Se não for corrigido o número não será escrito por extenso.';

showmessage(msg);

Result:='';

exit;

end;

if valor=0 then

begin

Result:='';

Exit;

end;

Texto:=formatfloat('000000.00',valor);

Milhar:=MiniExtenso(Copy(Texto,1,3));

Centena:=MiniExtenso(Copy(Texto,4,3));

Centavos:=MiniExtenso('0'+Copy(Texto,8,2));

Result:=Milhar;

if Milhar<>'' then

if copy(texto,4,3)='000' then

  Result:=Result+' Mil Reais'

else

  Result:=Result+' Mil, ';

if (((copy(texto,4,2)='00') and (Milhar<>'')

   and (copy(texto,6,1)<>'0')) or (centavos=''))

   and (Centena<>'') then Result:=Result+' e ';

if (Milhar+Centena <>'') then Result:=Result+Centena;

if (Milhar='') and (copy(texto,4,3)='001') then

Result:=Result+' Real'

else

if (copy(texto,4,3)<>'000') then Result:=Result+' Reais';

if Centavos='' then

begin

Result:=Result+'.';

Exit;

end

else

begin

if Milhar+Centena='' then

   Result:=Centavos

  else

   Result:=Result+', e '+Centavos;

if (copy(texto,8,2)='01') and (Centavos<>'') then

Result:=Result+' Centavo.'

else

Result:=Result+' Centavos.';

end;

end;



end.

Link para o comentário
Compartilhar em outros sites

  • 0
eu preciso de uma "mini função" que retorne por extenso um número ordinário e inteiro, de 0 'a 99.

...

preciso de algo bem simples e sem valores.

petini, especificamente para contar de 0 a 99!!!

function DezenaExtenso(valor :word) :string;
const
  Unidades: array[1..9] of string = ('Um', 'Dois', 'Tres', 'Quatro', 'Cinco', 'Seis', 'Sete', 'Oito', 'Nove');
  Dez: array[11..19] of string = ('Onze', 'Doze', 'Treze', 'Quatorze', 'Quinze', 'Dezesseis', 'Dezessete', 'Dezoito', 'Dezenove');
  Dezenas: array[1..9] of string = ('Dez', 'Vinte', 'Trinta', 'Quarenta', 'Cinquenta', 'Sessenta', 'Setenta', 'Oitenta', 'Noventa');
begin
  if valor > 99 then
    Raise Exception.Create('Valor válido apenas de 0 a 99');

  case valor of
    0 : Result := 'Zero';
    1..9 :Result := Unidades[Valor];
   11..19 : Result := Dez[Valor];
  else
    if (Valor mod 10) = 0 then
      Result := Dezenas[Valor div 10]
    else
      Result := Dezenas[Valor div 10] + ' e ' +DezenaExtenso(Valor mod 10);
  end;
end;

Abraços

Editado por Micheus
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...