problema com quot;contas a receberquot;
o codigo eh o seguinte:
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
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
Curtidas 0
Respostas
Dopi
27/05/2004
Experimente usar a função
RoundTo(Valor,-2)
a invés de
Trunc(valor*100)/100
RoundTo(Valor,-2)
a invés de
Trunc(valor*100)/100
GOSTEI 0
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.
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
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
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