我正在尝试为显卡制作一个低级性能比较工具,除了总线宽度比较之外,一切都工作得很好。
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>
据我所知,我已经正确编码了。在我的示例中,基线为 128 位,目标为 64 位,应使用第一个 if
语句,因为目标总线宽度小于基线。
然而,结果却和我想象的完全不同。由于某种原因,JavaScript 似乎认为答案是 -64 位作为基线,+64 位作为目标。
我花了几天时间试图找出为什么会发生这种情况,甚至重新编码整个文件,但最终还是出现了同样的错误。有人能解释一下吗?我有一种感觉,有一些明显的事情我没有注意到。
最佳答案
我在进行任何数学运算之前解析了这些值。这看起来正确吗?
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>
关于JavaScript 数学 — 得到错误答案 (128 - 64 = -64)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36434165/