Como Arrumar o Valor Arredondamento no Parcelamento Que Está Parcelando Errado???
Boa noite!!!
Tenho esse código para parcelamento, mais as parcelas do valor líquido estão sendo parceladas com diferença de valor!!!Como no faturamento desse pedido!!!
Valor Bruto: 3700,00
Quantidade de Parcelas: 3
Parcelas Gerada: 1° 1233,33 / 2° 1233,33 / 3° 1233,34 = 3700,00
Juros Aplicado em Percentual foi de 1% = 3700,00 - 1% = 3663,00 / 3 = 3 Parcelas de 1221,00 porém ele está gerando assim
1° Parcela 1220,99
2° Parcela 1220,99
3° Parcela 1221,00
Que é igual a 3662,98
Já olhei o código mais não consigo achar aonde está o erro, se puderem me ajudar.Ficarei muito grato!!!
Tenho esse código para parcelamento, mais as parcelas do valor líquido estão sendo parceladas com diferença de valor!!!Como no faturamento desse pedido!!!
Valor Bruto: 3700,00
Quantidade de Parcelas: 3
Parcelas Gerada: 1° 1233,33 / 2° 1233,33 / 3° 1233,34 = 3700,00
Juros Aplicado em Percentual foi de 1% = 3700,00 - 1% = 3663,00 / 3 = 3 Parcelas de 1221,00 porém ele está gerando assim
1° Parcela 1220,99
2° Parcela 1220,99
3° Parcela 1221,00
Que é igual a 3662,98
Já olhei o código mais não consigo achar aonde está o erro, se puderem me ajudar.Ficarei muito grato!!!
procedure TFrmCondicaoPagamentoCartao.BtnGerarClick(Sender: TObject);
var
nValor: currency;
nDesconto: Currency;
nValorParcela: Currency;
nQtdeParcelas: integer;
dDataPrimeiraParcela: TDate;
dVencimento: TDate;
i: integer;
Parcela, Resto: currency;
ValorParc: String;
z: integer;
x : String;
begin
nQtdeParcelas:=0;
nValor := StrToFloat(RetirarPonto(EdtValorCondicaoCartao.Text));
nQtdeParcelas := StrToInt(EdtQtdParcelas.Text);
nDesconto:= StrToFloat(RetirarPonto(EdtTaxa.Text));
dDataPrimeiraParcela := StrToDate(MskDataCondicaoCartao.Text);
dVencimento := dDataPrimeiraParcela + FrmCadCartoes.CdsCadCartoes.FieldByName('CARTAOPRAZO').AsInteger;
if dDataPrimeiraParcela = 0 then
begin
ShowMessage('Digite uma data válida para a primeira parcela.');
MskDataCondicaoCartao.SetFocus;
Exit;
end;
CdsCondicaoPagamentoCartao.EmptyDataSet;
begin
z := 0;
While z < StrToInt(EdtQtdParcelas.text) Do
begin
z := z + 1;
//x:= IntToStr(StrToInt(EdtCodigoCondicaoCartao.Text)) + '/';
x:= EdtBandeiraCondicaoCartao.Text + '/';
end;
end;
Parcela := nValor/nQtdeParcelas;
Parcela := StrToCurr(RetirarPonto(FormatFloat('#,###.00', Parcela)));
Resto := nValor - (Parcela*nQtdeParcelas);
for i := 1 to nQtdeParcelas do
begin
ValorParc := CurrToStr(Parcela);
if I < nQtdeParcelas then
begin
ValorParc := FloatToStr(Parcela);
CdsCondicaoPagamentoCartao.Append;
CdsCondicaoPagamentoCartao.FieldByName('BANDEIRA').AsString := x + IntToStr(i);
CdsCondicaoPagamentoCartao.FieldByName('DATA').AsDateTime := dVencimento;
CdsCondicaoPagamentoCartao.FieldByName('VALOR').AsFloat := Parcela;
CdsCondicaoPagamentoCartao.FieldByName('VALORLIQUIDO').AsFloat := StrToCurr(ValorParc) - (StrToCurr(ValorParc) * (nDesconto / 100));
CdsCondicaoPagamentoCartao.FieldByName('CODIGOCLIENTE').AsInteger := StrToInt(EdtCodigoClienteCartao.Text);
CdsCondicaoPagamentoCartao.FieldByName('NOMECLIENTE').AsString := EdtNomeClienteCartao.Text;
CdsCondicaoPagamentoCartao.FieldByName('NOMECARTAO').AsString := EdtNomeCartao.Text;
CdsCondicaoPagamentoCartao.FieldByName('CODIGOCONDICAO').AsInteger := StrToInt(EdtCodigoCondicaoCartao.Text);
CdsCondicaoPagamentoCartao.FieldByName('NOMECONDICAO').AsString := EdtNomeCondicaoCartao.Text;
CdsCondicaoPagamentoCartao.FieldByName('NUMEROCARTAO').AsString := MskNumeroCondicaoCartao.Text;
CdsCondicaoPagamentoCartao.FieldByName('DOCUMENTO').AsString := EdtDocumentoCondicaoCartao.Text;
CdsCondicaoPagamentoCartao.FieldByName('AUTORIZACAO').AsString := EdtAutorizacaoCondicaoCartao.Text;
CdsCondicaoPagamentoCartao.FieldByName('DESCONTO').AsString := EdtTaxa.Text;
CdsCondicaoPagamentoCartao.FieldByName('TIPO').AsString := EdtTipo.Text;
CdsCondicaoPagamentoCartao.Post;
CdsCondicaoPagamentoCartao.Next;
dVencimento := IncMonth(dVencimento)
end
else
begin
Parcela := Parcela + Resto;
CdsCondicaoPagamentoCartao.Append;
CdsCondicaoPagamentoCartao.FieldByName('BANDEIRA').AsString := x + IntToStr(i);
CdsCondicaoPagamentoCartao.FieldByName('DATA').AsDateTime := dVencimento;
CdsCondicaoPagamentoCartao.FieldByName('VALOR').AsFloat := Parcela;
CdsCondicaoPagamentoCartao.FieldByName('VALORLIQUIDO').AsFloat := Parcela - (Parcela * (nDesconto / 100));
CdsCondicaoPagamentoCartao.FieldByName('CODIGOCLIENTE').AsInteger := StrToInt(EdtCodigoClienteCartao.Text);
CdsCondicaoPagamentoCartao.FieldByName('NOMECLIENTE').AsString := EdtNomeClienteCartao.Text;
CdsCondicaoPagamentoCartao.FieldByName('NOMECARTAO').AsString := EdtNomeCartao.Text;
CdsCondicaoPagamentoCartao.FieldByName('CODIGOCONDICAO').AsInteger := StrToInt(EdtCodigoCondicaoCartao.Text);
CdsCondicaoPagamentoCartao.FieldByName('NOMECONDICAO').AsString := EdtNomeCondicaoCartao.Text;
CdsCondicaoPagamentoCartao.FieldByName('NUMEROCARTAO').AsString := MskNumeroCondicaoCartao.Text;
CdsCondicaoPagamentoCartao.FieldByName('DOCUMENTO').AsString := EdtDocumentoCondicaoCartao.Text;
CdsCondicaoPagamentoCartao.FieldByName('AUTORIZACAO').AsString := EdtAutorizacaoCondicaoCartao.Text;
CdsCondicaoPagamentoCartao.FieldByName('DESCONTO').AsString := EdtTaxa.Text;
CdsCondicaoPagamentoCartao.FieldByName('TIPO').AsString := EdtTipo.Text;
CdsCondicaoPagamentoCartao.Post;
CdsCondicaoPagamentoCartao.Next;
dVencimento := IncMonth(dVencimento)
end;
end;
CdsCondicaoPagamentoCartao.First;
end;Bruno Henrique
Curtidas 0
Respostas
Rafael Bosco
06/06/2016
RoundTo(ValorParcela, -2);
GOSTEI 0
Everton Santos
06/06/2016
tente fazer assim
exemplo
var
wValorTotal : Real;
wValorParcela : Real;
wResto : Real;
wQtdeParcelas : Integer;
wPercentual : Real;
begin
wValorTotal := 3700; // SEU VALOR
wPercentual : 1; // SEU PERCENTUAL A DIMINUIR
wQtdeParcelas := 3; // QTDE PARCELAS A DIVIDIR
// APLICANDO O DESCONTO EM PERCENTUAL %
wValorTotal := Format('%14.2f',[wValorTotal - (wValorTotal * wPercentual/100)]);
// DIVIDINDO
wValorParcela := Format('%14.2f',[wValorTotal / wQtdeParcelas]);
wResto := wValorTotal - (wValorParcela * wQtdeParcelas);
// AI ENTRA NO LOOP E QUANDO ESTIVER GERANDO A ULTIMA PARCELA
wValorParcela := wValorParcela - wResto
end;
exemplo
var
wValorTotal : Real;
wValorParcela : Real;
wResto : Real;
wQtdeParcelas : Integer;
wPercentual : Real;
begin
wValorTotal := 3700; // SEU VALOR
wPercentual : 1; // SEU PERCENTUAL A DIMINUIR
wQtdeParcelas := 3; // QTDE PARCELAS A DIVIDIR
// APLICANDO O DESCONTO EM PERCENTUAL %
wValorTotal := Format('%14.2f',[wValorTotal - (wValorTotal * wPercentual/100)]);
// DIVIDINDO
wValorParcela := Format('%14.2f',[wValorTotal / wQtdeParcelas]);
wResto := wValorTotal - (wValorParcela * wQtdeParcelas);
// AI ENTRA NO LOOP E QUANDO ESTIVER GERANDO A ULTIMA PARCELA
wValorParcela := wValorParcela - wResto
end;
GOSTEI 0
Bruno Henrique
06/06/2016
Pessoal, boa tarde!!!
Consegui aqui!!! Muito obrigado a todos
Consegui aqui!!! Muito obrigado a todos
GOSTEI 0