Arredondar Valor [URGENTE]

Delphi

12/07/2012

Bom Dia Pessoal,

Estou com um problema em arredondamento de casa decimais.
Estou desenvolvendo um relatório em QuickReport, que realiza a impressão do valor a ser pago para os funcionários de Hora Extra.

Porem eu gostaria que o valor total, que provem de uma soma, arredondasse da seguinte forma.

Ex. 1,01 - 1,49 = 1,50
1,51 - 1,59 = 2,00 .... assim por diante

Ou seja sempre arredondar de 50 em 50 centavos.

Alguem sabe e pode me ajudar a fazer isto??
Alex Rosalin

Alex Rosalin

Curtidas 0

Respostas

Romulo Contro

Romulo Contro

12/07/2012

tem que fazer gambiarra...

tenta criar uma função separada pra isso, aí vc passa o valor nela... converte pra string e lê os 2 ultimos digitos, e depois converte de novo esses 2 ultimos digitos pra int. feito isso, vc faz a verificação, se for menor ou igual a 49 e igual ou maior que 01, é 50... e se tiver entre 51 e 99, é 00... feito isso, vc faz a leitura da string novamente, mas sem pegar os ultimos 3 caracteres, que seria a virgula e os centavos... aí depois vc concatena os 2, converte pra double de novo e retorna esse valor...

é uma gambiarra bem nervosa mesmo, mas foi a unica maneira que pensei...
GOSTEI 0
Deivison Melo

Deivison Melo

12/07/2012

caso possa detalhar um pouco mais a solução que está precisando seria interessante!
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

12/07/2012

Cara não sei se entendi muito bem sua dúvida, mas se entendi certo acredito que seja mais ou menos isso que você quer, talvez com algumas adaptações:

function TForm1.arredonda(valor: Double): double;
var
  parteInteira: Double;
  parteDecimal: Double;
begin
  parteDecimal :=  Frac(valor) * 100;
  parteInteira := Trunc(valor);

  ShowMessage(FloatToStr(parteDecimal));
  if (parteDecimal > 0) and (parteDecimal <= 50) then
    Result := parteInteira + 0.50;

  if (parteDecimal > 50) then
    Result := parteInteira + 1;
end;
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

12/07/2012

Cara não sei se entendi muito bem sua dúvida, mas se entendi certo acredito que seja mais ou menos isso que você quer, talvez com algumas adaptações:

function TForm1.arredonda(valor: Double): double;
var
  parteInteira: Double;
  parteDecimal: Double;
begin
  parteDecimal :=  Frac(valor) * 100;
  parteInteira := Trunc(valor);

  ShowMessage(FloatToStr(parteDecimal));
  if (parteDecimal > 0) and (parteDecimal <= 50) then
    Result := parteInteira + 0.50;

  if (parteDecimal > 50) then
    Result := parteInteira + 1;
end;
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

12/07/2012

Desconsidera o showmessage só fiz pra teste mesmo! =P

Abraços
CauÊ Nishijima
GOSTEI 0
Romulo Contro

Romulo Contro

12/07/2012

Cauê, sua solução é mais ou menos o que eu disse, só que em uma versão melhorada e mais simples de entender!

boa!

o que eu entendi é que era isso que o Alex queria mesmo
GOSTEI 0
POSTAR