Text filtra apenas 4 casas decimais
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é
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
Curtidas 0
Respostas
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?
Não é melhor fazer showmessage(floattostr(sv_unit)); para ver o que acontece realmente?
GOSTEI 0
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.
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
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
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
29/10/2003
putz, deve ser isso mesmo... e agora?
existe outra forma de fazer calculo com casa decimais sem ser currency?
existe outra forma de fazer calculo com casa decimais sem ser currency?
GOSTEI 0
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
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
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!!!
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
29/10/2003
Abração das barbatanas do peixão norueguês :lol:
GOSTEI 0