Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, alguém sabe me explicar pq que acontece isto e como resolver?
Eu tenho este simples script:
<script language="javascript" type="text/javascript"><!-- var a = 1; var b = 0.82; var c = parseFloat(a + B); alert(c);//--></script>
a saída desta conta é "1.8199999999999998" sendo que eu apenas queria um simples "1.82"!
E isto está me atrapalhando bastante pq não consigo fazer a porcaria do JS calcular certo!
Sei que o JS tem problemas para trabalhar com nros... que ele não é mto preciso as vezes, mas pô! É uma conta muito simples esta!!!!! hehe
Será que esqueci de algo no code?
Alguém tem uma sugestão?
Valeu pessoal.
outra coisa q você pode fazer, eh mudar um poko a matematica, por exemplo, c você sabe q você vai mexer muito com 3 casas decimais, multiplica tudo por 1000, faz os calculos todo em inteiros, e depois (no final) divide por 1000, assim o javascript nao vai se perder nos flutuantes ;)
>
kra, eu consegui fazer aki, nao sei c eh mto confiavel, mas pega ai e faz uns testes pra ver se resolve:
var a = 1;var b = 0.82;var c = (a + b).toPrecision(3);alert(c);
Valeu Wilker, funcionou a sua sugestão do toPrecision, a segunda sugestão não funciona muito bem com os calculos do sistema. Já era feito uma lógica semelhante ao que disse e dá um erro muito frequente de diferença de 1 centavo o que já me gerou muita dor de cabeça que poderia ter sido evitado se eu conhecesse o toPrecision hehehe e também a função que faz isto é variável, ela se adapta a qtde de casas decimais que for passado por parametro o que já consegui fazer também com o toPrecision.De qualquer forma, valeu! Me ajudou bastanteAbraço! :)
kra, eu consegui fazer aki, nao sei c eh mto confiavel, mas pega ai e faz uns testes pra ver se resolve:
var a = 1;var b = 0.82;var c = (a + b).toPrecision(3);alert(c);