petini Postado Janeiro 5, 2009 Denunciar Share Postado Janeiro 5, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Janeiro 5, 2009 Denunciar Share Postado Janeiro 5, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 petini Postado Janeiro 6, 2009 Autor Denunciar Share Postado Janeiro 6, 2009 Antonio,muito obrigado. vou tentar fazer aqui. qualquer coisa voltarei. t+ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 8, 2009 Denunciar Share Postado Janeiro 8, 2009 (editado) 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 Janeiro 8, 2009 por Micheus Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
petini
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
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.