Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dataset

parseFloat - Retorna várias casas decimais

Recommended Posts

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.

parsefloat.jpg

 

Porque isso acontece ?

Como eu faço pra resolver isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites
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:
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só é negativo se o segundo número for maior que o primeiro.

Essa conta:

50 - 10,05 = -39,95
está incorreta.

O resultado é:

50 - 10,05 = 39,95
Só seria negativo, caso fosse:

10,05 - 50 = -39,95
Ai, o próprio js vai se encarregar de colocar o - pra você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.