2010-11-24 4 views
0

Je suis en train d'exécuter la somme suivante en JavaScriptincorrect résultat math Javascript, suppression NaN un message

(a + b) - c

mais malheureusement, je continue à obtenir le résultat suivant (par exemple le soleil):

(25 + 25) - 1

= 2524

ici est le code im en utilisant au moment

 <script> 
    $(document).ready(function(){ 
     $('#previousRent').change(function(){ 
     calcResult(); 
     }); 
     $('#rentPaid').change(function(){ 
     calcResult(); 
     }); 
     $('#wRun').change(function(){ 
     calcResult(); 
     }); 
    }); 
    function calcResult() { 
     $('#result').val(parseFloat($('#previousRent').val() + parseFloat($('#wRun').val()) - $('#rentPaid').val())); 
    } 
    </script> 

Est-ce que quelqu'un sait comment se débarrasser de l'NaN qui apparaît lorsque tous les champs ne sont pas remplis?

Répondre

1

je ferais quelque chose comme ça, dans le cas où les champs ne sont pas renseignés:

function calcResult() { 
$('#result').val(
    (parseFloat($('#previousRent').val()||"0") + parseFloat($('#wRun').val()||"0")) 
    - parseFloat($('#rentPaid').val()||"0")); 
} 

Cela traiterait tout champ vide comme 0 au lieu de lancer une erreur de calcul NaN. Ou, un peu plus propre version:

function getVal(sel) { return parseFloat($(sel).val()||"0"); } 
function calcResult() { 
    $('#result').val(getVal('#previousRent') + getVal('#wRun') - getVal('#rentPaid')); 
} 
8

Je pense que vous devez réarranger les parenthèses un peu:

function calcResult() { 
    $('#result').val((parseFloat($('#previousRent').val()) + parseFloat($('#wRun').val())) - $('#rentPaid').val()); 
} 

Edit: Quelques explications: Notez que la fonction val() renvoie la valeur de l'élément, qui est une chaîne. En javascript, l'opérateur "+" est utilisé pour concaténer des chaînes, ce qui signifie que vous envoyez "2525" au premier appel parseFloat.

+0

cela fonctionne parfaitement bien mais comment puis-je me débarrasser de la NaN qui apparaît lorsque tous les champs ne sont pas remplis? – methuselah

2

Vous avez un problème avec les parenthèses. Ceci est la ligne droite:

$('#result').val(parseFloat($('#previousRent').val()) + parseFloat($('#wRun').val()) - parseFloat($('#rentPaid').val())); 
2
calcResult() fonction

change avec ci-dessous le contenu

function calcResult() { 
    $('#result').val(parseFloat($('#previousRent').val()) + parseFloat($('#wRun').val()) - parseFloat($('#rentPaid').val())); 
} 
1

Pas besoin d'utiliser les crochets lorsque vous utilisez seulement (24 + 24) -1

Il suffit d'utiliser comme ceci 24 + 24-1

pasrse chaque chaîne de flotter séparemment

Vous avez utilisé

$('#result').val( 
     parseFloat($('#previousRent').val() 
    + parseFloat($('#wRun').val()) 
    - $('#rentPaid').val())); 

Utilisez cette

 $('#result').val( 
    parseFloat($('#previousRent').val()) 
    + parseFloat($('#wRun').val()) 
    - parseFloat($('#rentPaid').val())); 
2

Vous essayez d'ajouter des chaînes qui les concaténent. Je ne connais pas jQuery, mais vous devez vous assurer que vos variables se retrouvent en tant que valeurs entières ou flottantes pour pouvoir évaluer la correspondance, pas les chaînes.