2015-10-06 29 views
5

Gdy uruchamiam to, zwraca NaN. Jeśli nie parsuję, otrzymuję 2 ciągi dodane. czego mi brakuje? Powiedziałbym, że mój wynik powinien zawsze być zmienny?JavaScript Float + Float = String?

function calculate(i) { 
    var result = 0.0; 
    $j(".t" + i + " input").each(function() { 
     var number = $j(this).val(); 
     number = number.replace(",", "."); 

     if (parseFloat(number) != NaN) { 
      result = parseFloat(result); 
      number = parseFloat(number); 
      result += number; 
     } 
    }); 
    console.log(result); 
    return result; 
} 
+0

No wartość jest równa 'NaN'. Zawsze. – spender

+0

Dodawanie HTML może pomóc (a także wartości z pól wejściowych). –

Odpowiedz

7

Nie jesteś walidacji nie liczba poprawnie. Aby sprawdzić, czy liczba jest NaN użyć isNaN funkcję:

if (!isNaN(parseFloat(number))) { ... } 

Zauważ, że NaN === NaN powraca false zawsze.

Możesz przeczytać więcej na ten temat tutaj: Why is NaN === NaN false?

Oto kompletny kod:

function calculate(i) { 
    var result = 0; 
    $j(".t" + i + " input").each(function() { 
     var number = $j(this).val(); 
     number = parseFloat(number.replace(",", ".")); 

     if (isNaN(number)) { 
      return; 
     } 
     result += number; 
    }); 
    console.log(result); 
    return result; 
} 
+0

Masz literówkę '(! IsNanN (' Powinno być '(! IsNaN (' right? – NewToJS

+0

@NewToJS Oh, dzięki! Dobre oczy! :-) –

+0

Bardzo mile widziane :) Prosty błąd, wiedziałem, że coś wygląda nie na miejscu, Musiałem spojrzeć dwa razy, aby to zauważyć – NewToJS