2012-04-05 7 views
0

Warum ist rfd_total > max_rfd wahr? Ich verstehe nicht, wie rfd_total größer als max_rfd im folgenden Code sein kann:Warum ist eine Variable größer als die andere in diesem Code?

max_rfd = parseFloat(jQuery('#mx-rfd_'+order_id).val()).toFixed(2); 

rfd_total = parseFloat(items_total+tax_total+shipping+allowances*1).toFixed(2); 


if(rfd_total > max_rfd) 
{ if(isNaN(rfd_total)) alert('rfd_total isNaN'); // not triggered 
    if(isNaN(max_rfd)) alert('max_rfd isNaN'); // not triggered 
    alert(rfd_total); // alerts 51.16 
    alert(max_rfd); // alerts 102.32 
    return false; 
} 
+0

Holen Sie sich ein console.log (max_rfd, rdf_total) dort verwendet wird. Hol Chrome-Dev-Tools oder Firebug raus und sieh dir die Ausgabe an. Sie können ihre Werte sehen und ob sie Zeichenfolgen oder Zahlen sind;) –

+0

für einen schnellen Test in der if-Anweisung tun, wenn ((rfd_total * 1)> (max_rfd * 1)) dann sollte es in eine Zahl konvertieren. Das sollte zu den gewünschten Ergebnissen führen. Wenn dies der Fall ist, wenden Sie die ursprünglichen Variablen als Ersatz für parseFloat an. EDIT: Griffin wies darauf hin, dass ToFixed() eine Zeichenfolge zurückgibt. Also multiplizieren Sie nach toFixed() mit 1, wenn Sie diese Methode verwenden möchten. –

+0

@MikeDepies wie Sie sehen, ich hatte Zuflucht zu der * 1 Ansatz in der Einstellung rfd_total, aber wieder, was ich nicht verstehe ist, warum weder isNaN (rfd_total) NOR IsNaN (max_rfd) zurück wahr? – WallabyKid

Antwort

4

Es ist, weil rfd_total ein max_rfd Strings sind.

Sie werden feststellen, dass "51.16" > "102.32" wahr zurückgibt.

gibt eine Zeichenfolge zurück.

Sie müssen Ihre Variablen zu Zahlen zwingen, die Sie mit einer schnellen Suche herausfinden können.

Oder Sie können Ihren Code sauber halten und tun es richtig, eine Funktion wie diese

function decimalRoundTo(n, decimalPlaces) { 
    var d = Math.pow(10, decimalPlaces); 
    return Math.round(n*d)/d; 
} 
+0

Nun, du gehst! Neuigkeiten für mich. Das erklärt soooo viel. Ich wusste nie, dass toFixed() eine Saite neu abstimmte! ... aber würde isNaN() nicht false zurückgeben? – WallabyKid

+0

@WallabyKid, du hast recht, 'isNaN' gibt' false' zurück. Aus diesem Grund werden Ihre Warnungen nicht ausgelöst. Ich habe ein bisschen mehr zu meiner Antwort hinzugefügt. – Griffin

+0

von return false ich meine zurück wahr! z. B. rfd_total isNaN, weil es eine Zeichenfolge ist. Recht? – WallabyKid