我的JavaScript验证存在问题。
在if条件中,我正在检查几个始终为十进制的文本框值,但if条件返回true
以进行以下操作! (我查看了chrome控制台中的数字)。
76.02 != 61.02 + 15
但是,对于以下内容,它返回false。
76.02 != 61 + 15.02
当我选中61.02+15
时,它会返回76.02000000000001
和61+15.02 = 76.02
。
谁能告诉我为什么?
如何解决这样的问题?
代码
if (getNumber($(this).find('[id$="txtAllowed"]').val()) !=
(getNumber($(this).find('[id$="txtPayment"]').val())
+ getNumber($(this).find('[id$="txtBal"]').val()))
{
}
function getNumber(val) {
if (val.trim() == "") {
return 0;
} else if (isNaN(val.trim())) {
return 0;
}
return parseFloat(val.trim());
}
谢谢。
答案 0 :(得分:1)
尝试使用round()或者使用.toFixed()
(12121.3243434).toFixed(2)
toFixed()方法将数字转换为字符串,保留一个 指定的小数位数。
答案 1 :(得分:1)
Javascript中的数字只能表示
形式的数量n / (2**k)
n
和k
都是整数。除此之外,对k
和n
的大小也有限制。
换句话说,对于小数,唯一可以精确表示的量具有分母,该分母在一定范围内是2的整数幂。
数字1/10 = 0.1并且它的倍数在Javascript中没有完全表示(你可以认为它们相当于1/3 = 0.3333333 ...在基数10:没有2的幂会给你一个积分当乘以0.1时的数字,这是你观察到的问题的根源。
因此,任何在浮点数之间使用相等/不相等比较的代码至少是可疑的。当您使用近似数量时,即使a+b+c
不一定等于c+b+a
,因为内部必要的近似值将以不同的顺序发生。