Fórum erro ao truncar #445626
17/06/2013
0
function TruncaCasasDecimais(valor: double): String;
var
parteInteira: string;
begin
//...
//quando passo o valor 464 obtenho 463 na variavel parteInteira
parteInteira:= Inttostr(trunc(valor));
//...
end
a chamada esta assim
var
qtd, valor: double;
begin
qtd := 50;
valor := 9.28;
variavel := TruncaCasasDecimais(qtd * valor);
Joab Silveira
Curtir tópico
+ 1Post mais votado
18/06/2013
então ou vc reescreva a função Trunc ou personalize
vc pode utilizar um copy ate acha o decimalseperator para extrair a parte inteira deste numero
entende ???
Marco Salles
Gostei + 1
Mais Posts
18/06/2013
Marco Salles
Gostei + 0
18/06/2013
Joab Silveira
como falei anteriormente, ao passar o valor 464 obtenho como resultado 463, o correto seria retornar o mesmo valor
a intenção dessa funcao eh retornar a parte inteira de um numero, se fosse 464.11 deve retornar 464 e por ai vai
se passo um numero inteiro sem casas decimais, deve me retornar o proprio numero
obs.: repare que eu faço a chamada apos um calculo entre duas variaveis, qtd * valor
onde qtd = 50 e valor = 9.28, qtd * valor = 464
se eu passar a constante 464 funciona, mas se eu passar o calculo nas duas variaveis acima nao da certo
ex.:
assim funciona
variavel := TruncaCasasDecimais(464);
assim nao funciona
var
qtd, valor: double;
begin
qtd := 50;
valor := 9.28;
variavel := TruncaCasasDecimais(qtd * valor);
Gostei + 0
18/06/2013
Marco Salles
Então joab silveira , o delphi geralmente trabalha com média
Ao fazer a multiplicação , apesar de ser um Inteiro matematicamente falando
para o delphi isto é quase um Inteiro ...Isto é Bit a bit , 464 é diferente de (50 X 0.98)
a razão destas diferença muitas das vezes ocorre pela escolha do tipo que utilizamos para estas
variáveis , que irá interferir futuramente quando se utiliza funçoes de maiores precissões
O Parãmetro da função Truc é Extended e vc esta utilizando um double que é mais restritivo
Portanto sugiro trocar o parâmetro para Extended
var
qtd, valor: Extended;boa sorte
[]sds
Gostei + 0
18/06/2013
Joab Silveira
só tem um problema, no codigo original os valores vem de um banco de dados atraves de tfloatfields, que originalmente sao double
ate tentei colocar os valores dos tfloatfields em variaveis extended mas nao funcionou
ex.:
var
qtd, valor: extended;
begin
dataset.open;
qtd := datasetqtd.value;
valor := datasetvalor.value;
variavelqualquer := TruncaCasaDecimais(qtd * valor);
Gostei + 0
18/06/2013
Joab Silveira
só tem um problema, no codigo original os valores vem de um banco de dados atraves de tfloatfields, que originalmente sao double
ate tentei colocar os valores dos tfloatfields em variaveis extended mas nao funcionou
ex.:
var
qtd, valor: extended;
begin
dataset.open;
qtd := datasetqtd.value;
valor := datasetvalor.value;
variavelqualquer := TruncaCasaDecimais(qtd * valor);
obs.: mudei tambem o parametro na função TruncaCasaDecimais para extended, mas ainda assim nada
Gostei + 0
18/06/2013
Marco Salles
e deu certo nos teste dele e meu
[]sds
Gostei + 0
19/06/2013
Joab Silveira
obrigado
Gostei + 0
26/09/2013
José
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)