Fórum Text filtra apenas 4 casas decimais #191348

29/10/2003

0

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

Responder

Posts

29/10/2003

Bacalhau

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?


Responder

Gostei + 0

29/10/2003

Matrixkid

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.


Responder

Gostei + 0

29/10/2003

Bacalhau

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


Responder

Gostei + 0

29/10/2003

Matrixkid

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

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


Responder

Gostei + 0

29/10/2003

Bacalhau

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


Responder

Gostei + 0

29/10/2003

Matrixkid

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!!!


Responder

Gostei + 0

29/10/2003

Bacalhau

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar