problema com quot;contas a receberquot;

Delphi

27/05/2004

o codigo eh o seguinte:

procedure TFAcordo.ButConfirmaClick(Sender: TObject);
var
  i: integer;
  ValorParcela: currency;
  Total: currency;
  NumParcela: integer;
  UltimaParcela: currency;
  Temp: currency;
begin
  UltimaParcela:=0;
  NumParcela:=StrToInt(ENumParcela.Text);
  Total:=StrToCurr(ETotal.Text);
  ValorParcela:=Total/NumParcela;
  ValorParcela:=ValorParcela*100;
  ValorParcela:=Trunc(ValorParcela);
  ValorParcela:=ValorParcela/100;
  Temp:=ValorParcela*NumParcela;
  if temp >= total then
  begin
    UltimaParcela:=(Temp-total)+ValorParcela;
  end
  else if temp <= total then
       begin
         UltimaParcela:=(Total-temp)+ValorParcela;
       end;
  for i:=1 to NumParcela do
  begin
    DM.IBDataSetAcordo.Append;
    DM.IBDataSetAcordo[´NOME´]:=ENome.KeyValue;
    DM.IBDataSetAcordo[´OBS´]:=EAcordo.Text;
    DM.IBDataSetAcordo[´APTO´]:=EApto.Text;
    DM.IBDataSetAcordo[´CONDOMINIO´]:=ECondominio.Text;
    DM.IBDataSetAcordo[´NUMDOC´]:=ENumDoc.Text;
    DM.IBDataSetAcordo[´NUM_PARC´]:=inttostr(i)+´/´+inttostr(NumParcela);
    DM.IBDataSetAcordo[´TOTAL´]:=StrToCurr(ETotal.Text);
    DM.IBDataSetAcordo[´SITUACAO´]:=´EM ABERTO´;
    if i <> NumParcela then
      DM.IBDataSetAcordo[´VALOR´]:=ValorParcela
    else
      DM.IBDataSetAcordo[´VALOR´]:=UltimaParcela;
    DM.IBDataSetAcordo.Post;
  end;
end;


esse codigo funciona para valores pequenos como 100,00, onde parcelado em 3 vezes: 33,33, 33,33 e 33,34.

mas para valores maiores como 100.000,00, as parcelas aparecem assim, quando parcelado em 3 vezes: 33.333,3281, 33.333,3281 e 33.333,3419. o correto deveria ser: 33.333,33, 33.333,33 e 33.333,34.

esqueci de algum detalhe?

agradeco a quem puder me ajudar
fabricio


Fabriciogmuller

Fabriciogmuller

Curtidas 0

Respostas

Dopi

Dopi

27/05/2004

Experimente usar a função

RoundTo(Valor,-2)

a invés de

Trunc(valor*100)/100


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

27/05/2004

Colega,

Após a divisão pelo número de parcelas e arredondamento, você deve multiplicar novamente pelo número de parcelas e verificar a diferença entre o valor apurado e o valor original para ajustar em uma das parcelas, normalmente, na última ou na primeira.


GOSTEI 0
Fabriciogmuller

Fabriciogmuller

27/05/2004

Valeu pelas respostas, Masssss....

testei a funcao RoundTo(ValorParcela,-2) e aconteceu a mesma coisa, soh funciona para valores pequenos...
quando valores maiores, há 4 casas decimais :(

agredeco se alguem tiver alguma outra sugestao

fabricio


GOSTEI 0
POSTAR