Jquery比较不能正常工作

时间:2017-01-19 02:46:13

标签: jquery

received = parseFloat($('input[name=amount_received]').val()).toFixed(2);
total_amount= parseFloat($('input[name=total_bill]').val()).toFixed(2);

其中输入的接收值是99和3930.85(总量)

if(received >= total_amount) {

console.log("full");

} else {

console.log("partial");

}

它总是说完整,

有人可以帮助解释原因吗

3 个答案:

答案 0 :(得分:0)

因为toFixed()返回一个字符串,所以你要比较字符串而不是数字。在基于字符串的比较中,99将在3930.85之后,并且大于或等于的比较将评估为真。

取消对toFixed()的调用将解决它。

received = parseFloat($('input[name=amount_received]').val());
total_amount = parseFloat($('input[name=total_bill]').val());

if (received >= total_amount) {
  console.log("full");

} else {
  console.log("partial");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input name="amount_received" value="99" />
<input name="total_bill" value="3930.85" />

作为旁注,使用toFixed()在舍入时是不可靠的。在当前的Chrome和Firefox中,调用toFixed()会产生以下不一致的结果:

35.655.toFixed(2) // Yields "36.66" (correct)
35.855.toFixed(2) // Yields "35.85" (wrong, should be "35.86")

另请参阅讨论here,并参考MDN了解可靠的舍入方法。

答案 1 :(得分:-1)

来自.toFixed() documentation

  

返回值
  使用定点表示法表示给定数字的字符串。

当你比较一个字符串>=时,另一个字符串会给你一个词典排序的比较(即。"9" > "3"所以"99.00" > "3930.85")。有关基于字符串的比较的怪癖的更多详细信息,请查看this answer

暂停使用.toFixed(),直到您完成对数字的任何算术运算,然后将其用于显示。

<强> JS

received = parseFloat($('input[name=amount_received]').val());
total_amount = parseFloat($('input[name=total_bill]').val());

答案 2 :(得分:-2)

执行toFixed函数时,它将值转换为字符串。因此,字符串“99”始终大于字符串“3930.85”。

你可以做些什么来解决这个问题:

{{1}}

上面的代码在toFixed函数之后进行转换。