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");
}
它总是说完整,
有人可以帮助解释原因吗
答案 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")
答案 1 :(得分:-1)
返回值
使用定点表示法表示给定数字的字符串。
当你比较一个字符串>=
时,另一个字符串会给你一个词典排序的比较(即。"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函数之后进行转换。