Fórum Problemas com funcao matematica delphi 7 #223977
02/04/2004
0
estou fazendo um programa que deve gerar um calculo de parcelas ex:
200.00 dividido em tres pacelas deveria ficar assim uma parcela de 68, e as outras de 66 sem gerar centavos no clipper ele faz direitinho mais no delphi a funcao que fiz no delphi foi a seguinte:
procedure TForm1.Button1Click(Sender: TObject);
var Tp,t,x:integer;
Ttot, Tresto, Tvdup:Real;
begin
Ttot:=200;
Tp:=3;
for x:=1 to Tp do
begin
Tvdup:=(Ttot/Tp);
Tvdup:=Round(Tvdup);
Tresto:=Ttot-(Tvdup*Tp); //nunca le esta linha qundo depuro
if x=1 then
Tvdup:=Tvdup+Tresto;
end;
end;
e nao arredonda nada ja tentei com int(tot/tp) retorna 0
se colocar tvdup=round(ttot/tp) retorna 0 e do jeito que esta nao arredonda fica 66,666666
Tem alguma solucao para este caso?
Grato antecipadamente, léo.
Cleudsoncosta
Curtir tópico
+ 0Posts
02/04/2004
Marcio.theis
Gostei + 0
02/04/2004
Emerson Nascimento
[url]http://delphiforum.icft.com.br/forum/viewtopic.php?t=36156[/url]
Gostei + 0
02/04/2004
Aroldo Zanela
Mais uma sugestão, baseado no seu tópico:
var ValorTotal: Currency; ValorParcelas, PrimeiraParcela: Integer; nParcelas: Integer; begin ValorTotal := 200; nParcelas := 3; ValorParcelas := Trunc(ValorTotal/nParcelas); PrimeiraParcela := ValorParcelas + Trunc(ValorTotal - (ValorParcelas * nParcelas));
Gostei + 0
02/04/2004
Marco Salles
Com Certeza o Mais Interresante em Seu Tópico Seja Este Detalhe..Um Detalhe Quase Que Imperceptível, Mas Que Voce Fez Questão De Mencionar... Se Voce Ñotar, [b:f985449ce3]Esta não é a Única Linha [/b:f985449ce3]Que o Compilador Não Lê Quando Voce Depura o Programa.... A Instrução:
[b:f985449ce3]Tvdup:=Tvdup+Tresto; Também Não Lê [/b:f985449ce3] .....Na Realidade Estas [b:f985449ce3]Duas Instruções Não Chegam Nem a Ser Compiladas e Portando Não Serão Executadas,[/b:f985449ce3] Isto Dificultou a Voce Fazer Uma Análise Do Código Que Voce Gerou, Para Ver Onde Voce Esta Errando... Bem Que Voce Tentou Depurar So Que Nada Adiantou :!: :idea: :idea: A Saída Para Isto é Simples: Declare as Variáveis Ttot, Tresto, Tvdup:Real; Abaixo Da Secção implementation Do Form , Ou Force a Utilização Destas Variáveis Usando Por Exemplo a Função ShowMessage(FloatToStr(Tresto)); Para Concluir.. note a Analogia do Código Simples Abaixo, Com o Código Que Voce Gerou...
procedure TForm1.Button4Click(Sender: TObject); var x:Integer; begin x:=1; //Não Compila e Tambem Não Lé...E Isto Que Esta Acontecendo end; //Com Voce,Alem Dos Erros Que Voce Mesmo Pode Descobrir[
Ultima Dica: A Função Round Arredonda Para Cima Ou Para Baixo e a Funçaõ Trunc Simplesmente Arredonda... No Seu Caso é Melhor Usar a Função Trunc...Simplesmente Arredonda
Espero Que Voce Tenha Entendido a Mensagem e Com as Dicas Dos Companheiros aí Acima Tenha Condições Por Si So De Fazer A Sua Própia Rotina
Gostei + 0
02/04/2004
Aroldo Zanela
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TParcelamento = Class
ValorTotal: Currency;
PrimeiraParcela: Currency;
ValorParcelas: Currency;
QtdeParcelas: Integer;
procedure Clear;
procedure Execute;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var Parcelas: TParcelamento;
begin
Parcelas := TParcelamento.Create;
Parcelas.Clear;
Parcelas.ValorTotal := 200.00;
Parcelas.QtdeParcelas := 3;
Parcelas.Execute;
ShowMessage(´Primeira: ´ +FloatToStrF(Parcelas.PrimeiraParcela, ffNumber, 15, 2)+#13+
´Demais (´+ IntToStr(Parcelas.QtdeParcelas-1)+´): ´ +FloatToStrF(Parcelas.ValorParcelas, ffNumber, 15, 2));
Parcelas.ValorTotal := 300.00;
Parcelas.Execute;
ShowMessage(´Primeira: ´ +FloatToStrF(Parcelas.PrimeiraParcela, ffNumber, 15, 2)+13+
´Demais (´+ IntToStr(Parcelas.QtdeParcelas-1)+´): ´ +FloatToStrF(Parcelas.ValorParcelas, ffNumber, 15, 2));
Parcelas.ValorTotal := 445.00;
Parcelas.Execute;
ShowMessage(´Primeira: ´ +FloatToStrF(Parcelas.PrimeiraParcela, ffNumber, 15, 2)+13+
´Demais (´+ IntToStr(Parcelas.QtdeParcelas-1)+´): ´ +FloatToStrF(Parcelas.ValorParcelas, ffNumber, 15, 2));
Parcelas.Free;
end;
{ TParcelamento
ValorTotal: Currency;
PrimeiraParcela: Currency;
ValorParcelas:
QtdeParcelas: Integer;}
procedure TParcelamento.Clear;
begin
ValorTotal := 0;
PrimeiraParcela := 0;
ValorParcelas := 0;
QtdeParcelas := 0;
end;
procedure TParcelamento.Execute;
begin
ValorParcelas := Trunc(ValorTotal/QtdeParcelas);
PrimeiraParcela := ValorParcelas + Trunc(ValorTotal - (ValorParcelas * QtdeParcelas));
end;
end.Gostei + 0
02/04/2004
Marco Salles
Eu Foi Gentilmente Corrigido Pelo Aroldo, e Quero Em Publico Corrigir a Citação Anterior. De Fato Eu Me Expressei Mal. Estava Influenciado Pela Função Round Que ´Arredonda´ e Usei o Mesmo ´Termo´ Para a Função Trunc.. De Fato, o Que Deveria Ter Citado Corrigido Seria:
Gostei + 0
07/04/2004
Germando
Var
valor,parcela,total : real;
codigo : integer;
retorno : string;
begin
val(edit1.text,valor,codigo); //valor total
val(edit2.text,parcela,codigo); // quant de parcelas
Total := valor / parcela;
Str(total:8:0,retorno); // 8:0 sem casas decimais, arredonda 8:1 1
edit3.text := retorno;
end;
Gostei + 0
07/04/2004
Rômulo Barros
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)