Text filtra apenas 4 casas decimais

Delphi

29/10/2003

Ola, bom dia!

Estou tentando fazer uma form de compras, e no valor unitario existem produtos cujo preco possuem 5, 6 casas decimais.

exemplo - componente X - valor R$ 0,024545

Porém, ao retornar o valor, ele pega apenas 4 casas (0,0245) o que dá diferenca na hora de efetuar o calculo.

Como fazer o text pegar todas as decimais?

Codigo utilizado:

sv_unit := strtofloat(txt_valor.text);
sv_qde := strtoint(txt_qde.text);
sv_total := RoundN((sv_unit * sv_qde),2);
showmessage(floattostr(sv_total));

lbl_total.Caption := FormatFloat(´#0.00´,sv_total);

Obrigado,

André


Matrixkid

Matrixkid

Curtidas 0

Respostas

Bacalhau

Bacalhau

29/10/2003

Estimado, se sv_unit é do tipo real, ficou admirado como consegues SÓ 4 casas decimais.

Não é melhor fazer showmessage(floattostr(sv_unit)); para ver o que acontece realmente?


GOSTEI 0
Matrixkid

Matrixkid

29/10/2003

eu fiz varios testes depois q eu postei a duvida.

por exemplo, depois q eu entro com o text, ele retorna o valor correto

texto digitado - 0,023232

showmessage(edit1.text) ; /// exibe o valor correto

apos eu transforma-lo em currency, ele quebra e só deixa 4 casas decimais.

eu defini :
var sv_unit: currency;


na hora de converter:
sv_unit := floattostr(edit1.text);

se eu der showmessage, ele irá exibir -- 0,0232 , ou seja , cortou o restante dos decimais.


GOSTEI 0
Bacalhau

Bacalhau

29/10/2003

matrixkid, eu fui ao help do Delphi (3) e vi a seguinte linha

Currency-922337203685477.5808.. 922337203685477.5807

Trata-se do intervalo válido para este tipo. Ao que parece as 4 casas são mesmo uma limitação do Currency. Eu não aprofundei muito, nem sei se este intervalo mudou em versões posteriores do Delphi.

Mas se isto que eu disse for válido, tens de mudar de currency para outro tipo


GOSTEI 0
Matrixkid

Matrixkid

29/10/2003

putz, deve ser isso mesmo... e agora?

existe outra forma de fazer calculo com casa decimais sem ser currency?


GOSTEI 0
Bacalhau

Bacalhau

29/10/2003

A solução mais óbvia é trocar currency, por real.

O problema é que o comportamento do real (ATENÇÃO: REAL É UM TIPO, NÃO A VOSSA MOEDA!... :lol: ) é esquisito, para não falar outra coisa (perceberam agora a razão do grito lá atrás??).

O real gera imensas casas decimais, sendo que a 4ª (a que te interessa) será um arredondamento das restantes.

Acho que uma pesquisa no help sobre os tipos disponíveis é a melhor coisa. Vais encontrar o tipo que melhor se adequa ao problema

abraço
bacalhau


GOSTEI 0
Matrixkid

Matrixkid

29/10/2003

amigao, matou o problema.

realmente, foi só trocar currency por real e o float converteu com todas as casas decimais.... :lol:

só me toquei q real era um tipo qdo vc destacou, eheh... :oops:

iniciante é fogo...

brigadao!!!


GOSTEI 0
Bacalhau

Bacalhau

29/10/2003

Abração das barbatanas do peixão norueguês :lol:


GOSTEI 0
POSTAR