Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal...
Tenho 3 campos do tipo INPUT
valQtd
valSal
valPre
No onblur da quantidade, chamo essa função:
jQuery('#valQtd').blur(function() {
var valSal = jQuery('#valSal').val(); Pega o valo do Input Atual;
var valQtd = jQuery('#valQtd').val(); Pega o valo do Input Quantidade;
valSal = valSal.replace('.', ''); Tira o Ponto;
valSal = valSal.replace(',', '.'); Tira a Virgula e troca por ponto;
valQtd = valQtd.replace('.', ''); idem;
valQtd = valQtd.replace(',', '.'); idem;
jQuery('#vlrPre').val(parseFloat(valQtd) + parseFloat(valSal)); Soma e joga o valor Previsão;
});
Quando eu coloco alguns valores na quantidade, a Previsão dá certo. Mas nesse caso que eu coloquei 10,44 deu esse problema. Apareceu várias casas decimais.
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.solibras.com.br/sistem/images/parsefloat.jpg&key=f40194179e48719b69d014138e9efbb483b2f38e85583555ed723dff27fc0105" alt="parsefloat.jpg" />
Porque isso acontece ?
Como eu faço pra resolver isso ?
>
É só utilizar toFixed().
Caso não seja para fins de aprendizado, sugiro uso de um plugin para facilitar sua vida.
http://igorescobar.github.io/jQuery-Mask-Plugin/
É aquela velha historinha que todo mundo tem que conhecer sobre Javascript
Digite no console: 0.1 + 0.2, e veja o resultado.
0.30000000000000004
A melhor forma de contornar isso é manter padrões nos valores, através de um .toFixed(), ou até mesmo com um substring, dependendo do nível de insanidade do projeto em questão, rs. Não, use sim o toFixed().
Boa sorte!
Obrigado pessoal... funcionou.
Eu ainda não conhecia o toFixed()
Ficou assim:
jQuery('#valQtd').blur(function() {
var valSal = jQuery('#valSal').val();
var valQtd = jQuery('#valQtd').val();
valSal = valSal.replace('.', '');valSal = valSal.replace(',', '.');
valQtd = valQtd.replace('.', '');valQtd = valQtd.replace(',', '.');
jQuery('#vlrPre').val((parseFloat(valQtd) + parseFloat(valSal)).toFixed(qtdCasas));
});
Só pra melhorar, tem como reduzir o número de linhas? Pra ficar mais otimizado ?
Agradeço a ajuda.
Acho que está bom da forma que está, por se torna um código legível.
Se você quiser ainda diminuir a quantidade de linhas, você pode trabalhar diretamente do objeto do jQuery.
Oh, e é claro, usar o replace duas vezes:
jQuery('#valQtd').blur(function() {
var valSal = jQuery('#valSal').val().replace('.', '').replace(',', '.');
var valQtd = jQuery('#valQtd').val().replace('.', '').replace(',', '.');
jQuery('#vlrPre').val((parseFloat(valQtd) + parseFloat(valSal)).toFixed(qtdCasas));
});
Isso aqui deve surtir uns bons efeitos ;)
Lucas... funcionou perfeitamente...
Outra dúvida:
Em outro caso vou ter que diminuir em vez de somar. Mas ele não mostrava o sinal de negativo na frente do número. Veja:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.solibras.com.br/sistem/images/parsefloat2.jpg&key=671dafc7e801f9f445018586de39fbe8925bedb6454f95acb56e3375bc3c0129" alt="parsefloat2.jpg" />
50 - 10,05 = -39,95
Fiz a função com um if:
jQuery('#valQtd').blur(function() {
var valSal = jQuery('#valSal').val().replace('.', '').replace(',', '.');
var valQtd = jQuery('#valQtd').val().replace('.', '').replace(',', '.');
if ((parseFloat(valQtd) - parseFloat(valSal)) < 0 ) {
jQuery('#valPre').val((parseFloat(valQtd) - parseFloat(valSal)).toFixed(qtdCasas));
}else{
jQuery('#valPre').val('-' + (parseFloat(valQtd) - parseFloat(valSal)).toFixed(qtdCasas));
}
});
Dependendo do if eu concateno o - na frente.
Essa é a forma que vc faria ? Tem outra maneira pra não usar o if ?
Valew.
Só é negativo se o segundo número for maior que o primeiro.
Essa conta:
50 - 10,05 = -39,95está incorreta.
O resultado é:
50 - 10,05 = 39,95Só seria negativo, caso fosse:
10,05 - 50 = -39,95Ai, o próprio js vai se encarregar de colocar o - pra você.
William Bruno... mas não está colocando o sinal de - na frente.
O usuário pode colocar um numero menor no primeiro campo e um número maior no segundo campo. Ele tem essa permissão.
Tive que fazer aquele if pra concatenar o sinal negativo na frente.
Interessante né ?? O JavaScript não se encarregou de colocar o sinal.
Será que estou fazendo algo errado na operação matemática ?
Alguém sabe porque ?
Eu arrumei a função, ela tava errada mesmo. Agora tá colocando o sinal de - quando for negativo.
jQuery('#valQtd').blur(function() {
var valSal = jQuery('#valSal').val().replace('.', '').replace(',', '.');
var valQtd = jQuery('#valQtd').val().replace('.', '').replace(',', '.');
switch(parseInt(jQuery('#codTip').val())) {
case 0:
jQuery('#valQtd').val('');jQuery('#valPre').val('');break;
case 1:
jQuery('#valPre').val((parseFloat(valQtd) + parseFloat(valSal)).toFixed(qtdCasas));break;
case 2:
jQuery('#valPre').val((parseFloat(valSal) - parseFloat(valQtd)).toFixed(qtdCasas));break;
}
});
Se ele selecionar Entrada, a função faz a soma no estoque, se ele selecionar Saída, a função tira do estoque.
codTip é o id da ComboBox que tem as opções Entrada e Saída. Se ele não selecionar nada (0) daí limpa os camos de imput.
Obrigado a todos que me ajudaram.
Abração.
É só utilizar toFixed().
Caso não seja para fins de aprendizado, sugiro uso de um plugin para facilitar sua vida.
http://igorescobar.github.io/jQuery-Mask-Plugin/