Arredondar Valor [URGENTE]
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??
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
Curtidas 0
Respostas
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...
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
12/07/2012
caso possa detalhar um pouco mais a solução que está precisando seria interessante!
GOSTEI 0
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
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
12/07/2012
Desconsidera o showmessage só fiz pra teste mesmo! =P
Abraços
CauÊ Nishijima
Abraços
CauÊ Nishijima
GOSTEI 0
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
boa!
o que eu entendi é que era isso que o Alex queria mesmo
GOSTEI 0