2016-04-05 7 views
0

Ich versuche, ein Low-Level-Performance-Vergleichstool für Grafikkarten zu erstellen, und ich habe alles gut, außer für den Busbreitenvergleich.JavaScript Math - Die falsche Antwort erhalten (128 - 64 = -64)?

var bl_bus = $('#baseline-ram-bus-width').val(); 
 
var tg_bus = $('#target-ram-bus-width').val(); 
 

 
// Memory Bus Width 
 
    if (tg_bus < bl_bus) { 
 
     $('#compare-bus-bl span').text("+" + (bl_bus - tg_bus)); 
 
     $('#compare-bus-tg span').text((tg_bus - bl_bus)); 
 
    } 
 
    if (tg_bus === bl_bus) { 
 
     $('#compare-bus-bl span').text("Equal"); 
 
     $('#compare-bus-tg span').text("Equal"); 
 
    } 
 
    if (tg_bus > bl_bus) { 
 
     $('#compare-bus-bl span').text((tg_bus - bl_bus)); 
 
     $('#compare-bus-tg span').text("+" + (bl_bus - tg_bus)); 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<label for="baseline-ram-bus-width">Baseline Memory Bus Width:</label> 
 
<input id="baseline-ram-bus-width" type="number" placeholder="Memory Bus Width (b)" value="128"> bits 
 
<br> 
 

 
<label for="target-ram-bus-width">Target Memory Bus Width:</label> 
 
<input id="target-ram-bus-width" type="number" placeholder="Memory Bus Width (b)" value="64"> bits 
 
<br><br> 
 

 
<table> 
 
    <tr> 
 
     <th>Memory Bus Width</th> 
 
     <td id="compare-bus-bl"><span>0</span> bits</td> 
 
     <td id="compare-bus-tg"><span>0</span> bits</td> 
 
    </tr> 
 
</table>

Soweit ich sagen kann, habe ich es richtig codiert. In meinem Beispiel, in dem die Basislinie 128 Bit und das Ziel 64 Bit beträgt, sollte die erste if-Anweisung verwendet werden, da die Zielbusbreite geringer ist als die Basislinie.

Allerdings ist das Ergebnis völlig anders als ich es erwarte. Aus irgendeinem Grund scheint JavaScript zu glauben, dass die Antwort -64 Bit für die Baseline und +64 Bit für das Ziel ist.

Ich habe ein paar Tage damit verbracht, herauszufinden, warum das passiert ist, sogar soweit, dass ich die gesamte Datei rekodieren kann, aber mit dem gleichen Fehler endet. Kann jemand bitte etwas Licht darauf werfen? Ich habe das Gefühl, dass etwas offensichtlich ist, was ich nicht bemerke.

+0

Haben Sie einen Debugger haben? – Amit

+0

@Amit Ich habe den integrierten WebKit-Debugger von Opera verwendet. Es sind keine Fehler angegeben. – DylRicho

+0

Hat dieser Debugger Haltepunkte? – mjohnsonengr

Antwort

3

I analysiert die Werte, bevor Sie Mathe tun. Scheint das richtig?

var bl_bus = parseInt($('#baseline-ram-bus-width').val(), 10); 
 
var tg_bus = parseInt($('#target-ram-bus-width').val(), 10); 
 

 
// Memory Bus Width 
 
    if (tg_bus < bl_bus) { 
 
     $('#compare-bus-bl span').text("+" + (bl_bus - tg_bus)); 
 
     $('#compare-bus-tg span').text((tg_bus - bl_bus)); 
 
    } 
 
    if (tg_bus === bl_bus) { 
 
     $('#compare-bus-bl span').text("Equal"); 
 
     $('#compare-bus-tg span').text("Equal"); 
 
    } 
 
    if (tg_bus > bl_bus) { 
 
     $('#compare-bus-bl span').text((tg_bus - bl_bus)); 
 
     $('#compare-bus-tg span').text("+" + (bl_bus - tg_bus)); 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<label for="baseline-ram-bus-width">Baseline Memory Bus Width:</label> 
 
<input id="baseline-ram-bus-width" type="number" placeholder="Memory Bus Width (b)" value="128"> bits 
 
<br> 
 

 
<label for="target-ram-bus-width">Target Memory Bus Width:</label> 
 
<input id="target-ram-bus-width" type="number" placeholder="Memory Bus Width (b)" value="64"> bits 
 
<br><br> 
 

 
<table> 
 
    <tr> 
 
     <th>Memory Bus Width</th> 
 
     <td id="compare-bus-bl"><span>0</span> bits</td> 
 
     <td id="compare-bus-tg"><span>0</span> bits</td> 
 
    </tr> 
 
</table>

+0

Ich werde Ihre Antwort für das Gehen mit dem Standard-JavaScript zum Parsen von Ganzzahlen akzeptieren, da ich das wichtiger finde, als das jQuery-Äquivalent zu verstehen. Ich wusste, dass es so etwas albern wäre. – DylRicho

3

Seien Sie sicher, dass Sie die Werte in Integer-Format erhalten (Wie ich korrigiert)

var bl_bus = +$('#baseline-ram-bus-width').val(); 
var tg_bus = +$('#target-ram-bus-width').val(); 
+0

jQuery ist in meiner Datei geladen, ich muss es aus dem Kopieren + Einfügen verpasst haben. Entschuldigen Sie. – DylRicho

+0

Soll ich '+' oder 'parseInt()' verwenden? – DylRicho

+1

Während Sie jQuery verwenden, ist + ausreichend. parseInt ist eine JS-Native-Funktion – Mojtaba