Limitar as casas decimais

21/06/2018

0

Estou precisando limitar as casas decimais conforme parâmetro armazenado, por exemplo:
Caso o cliente tenha salvo que deseja utilizar 3 casas decimais a aplicação ira permitir somente 3 casas, se for 4 permite digitar 4 casas decimais, assim até o limite de 6 casas decimais.

Como eu faço isso?!?
Obrigado
Silvio Morelo

Silvio Morelo

Responder

Post mais votado

22/06/2018

Boa noite.
function TForm2.LimitarCD(CampoOrigem:Tedit; Conteúdo_Origem: string; Casas:integer): string;
var Valor_Monetário: Currency;
Var Qtd_CD_Selected:string;
begin
try
Valor_Monetário:=StrToCurr(Conteúdo_Origem) ;
    case Casas of
     2 : Qtd_CD_Selected:='###,###,##0.00';
     3 : Qtd_CD_Selected:='###,###,##0.000';
     4 : Qtd_CD_Selected:='###,###,##0.0000';
     5 : Qtd_CD_Selected:='###,###,##0.00000';
     6 : Qtd_CD_Selected:='###,###,##0.000000';
     end;
     Result:=FormatFloat(Qtd_CD_Selected,Valor_Monetário);
except
      ShowMessage('Você deve inserir um valor monetário válido');;
      CampoOrigem.SelectAll;
      CampoOrigem.SetFocus;
end;



Edit2.Text:=LimitarCD(Edit1,Edit1.Text,2);
Edit3.Text:=LimitarCD(Edit1,Edit1.Text,3);
Edit4.Text:=LimitarCD(Edit1,Edit1.Text,4);
Edit5.Text:=LimitarCD(Edit1,Edit1.Text,5);
Edit6.Text:=LimitarCD(Edit1,Edit1.Text,6);

Raimundo Pereira

Raimundo Pereira
Responder

Mais Posts

21/06/2018

Raimundo Pereira

Boa tarde.
Você que limitar ao gravar ou ao digitar no edit?
Responder

22/06/2018

Silvio Morelo

Blz P2
Eu preciso limitar no edit conforme parâmetro salvo na base de dados
Por exemplo mudar as casas decimais da quantidade em todo o sistema de acordo com o parâmetro no banco de dados.

Obrigado pela ajuda
Responder

23/06/2018

Raimundo Pereira

function LimitarCD(CampoOrigem:Tedit; Conteúdo_Origem: string ): string;
public
{ Public declarations }
end;
VAR Use_CASAS:INTEGER;

// Para setar a quantidade cadas decimais basta
// Criar uma tabela paramentro do sistema um campo integer
// QCD // Quantidade de casas decimais
// Ao iniciar sua aplicação você pode carregar o paramentro
// Setar a variável posteriormente.
// >>>>> Use_CASAS:= DM.PARAM.FIELBYNAME('QCD').ASINTEGER;


implementation

{$R *.dfm}



function TForm1.LimitarCD(CampoOrigem: TEdit; Conteúdo_Origem: string): string;
var
Valor_Monetário: real;
Var
Qtd_CD_Selected: string;
begin
// Se for = 0 ele irá setar para 2 casas
if Use_CASAS =0 then
Use_CASAS:=2;

// Se for > 6 ele irá setar para 6 casas
if Use_CASAS >6 then
Use_CASAS:=6;
//

try
Valor_Monetário := StrToFloat(Conteúdo_Origem);
case Use_CASAS of
2:
Qtd_CD_Selected := '###,###,##0.00';
3:
Qtd_CD_Selected := '###,###,##0.000';
4:
Qtd_CD_Selected := '###,###,##0.0000';
5:
Qtd_CD_Selected := '###,###,##0.00000';
6:
Qtd_CD_Selected := '###,###,##0.000000';
end;
Result := FormatFloat(Qtd_CD_Selected, Valor_Monetário);
except
ShowMessage('Você deve inserir um valor monetário válido');
;
CampoOrigem.SelectAll;
CampoOrigem.SetFocus;
end;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin

// Setar ao iniciar aplicação
// Simulando

// No onkeypress ele vai chamar a função para limitar.
if Key = #13 then
begin
Use_CASAS := 6; // setei aqui pois não usei uma tabela para carregar, mais você pode setar ao iniciar sua aplicação
// Carregando direto do BD.
Edit1.Text := LimitarCD(Edit1, Edit1.Text);
end;

end;

Nos retorne o feedback !
Abraço!
Responder

25/06/2018

Silvio Morelo

Obrigado P2, deu certo.

Abraços
Responder

17/07/2018

Senac Periodicals

Eu estou precisando limitar ao gravar no caso, me retornar uma mensagem dizendo que o numero colocado é invalido e etc
Responder

17/07/2018

Raimundo Pereira

Basta passar para o destino duas casas:

datamodule.suatabela.fielbyname('valordoproduto').value:=LimitarCD(Edit1,Edit1.Text,2);
Responder

17/07/2018

Raimundo Pereira

Esta função retorna uma string, basta converter
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar