erro ao truncar
Ao tentar pegar a parte inteira de um numero usando a função trunc o valor é alterado
a chamada esta assim
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
Curtidas 1
Melhor post
Marco Salles
18/06/2013
entendi ...
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 ???
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 ???
GOSTEI 1
Mais Respostas
Marco Salles
17/06/2013
e qual deveria ser a repsota e o que esta dando ???
GOSTEI 0
Joab Silveira
17/06/2013
Opa Marco, bom dia
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
assim nao funciona
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
Marco Salles
17/06/2013
Entendi ..
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
boa sorte
[]sds
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
Joab Silveira
17/06/2013
Opa Marco, realmente com extended funcionou
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.:
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
Joab Silveira
17/06/2013
Opa Marco, realmente com extended funcionou
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.:
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
Marco Salles
17/06/2013
Então amigo , conversando em off com o Imex , testou com o tipo Cuureny
e deu certo nos teste dele e meu
[]sds
"Currency is a fixed-point data type that minimizes rounding errors in monetary calculations
e deu certo nos teste dele e meu
[]sds
GOSTEI 0
Joab Silveira
17/06/2013
Opa Marco, agora funcionou com o currency
obrigado
obrigado
GOSTEI 0
José
17/06/2013
Como a duvida inicial foi sanada, estou finalizando este tópico.
GOSTEI 0