验证中的计算不匹配

时间:2014-03-29 06:23:56

标签: javascript validation

我的JavaScript验证存在问题。

在if条件中,我正在检查几个始终为十进制的文本框值,但if条件返回true以进行以下操作! (我查看了chrome控制台中的数字)。

76.02 != 61.02 + 15

但是,对于以下内容,它返回false。

76.02 != 61 + 15.02

当我选中61.02+15时,它会返回76.0200000000000161+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());
}

谢谢。

2 个答案:

答案 0 :(得分:1)

尝试使用round()或者使用.toFixed()

(12121.3243434).toFixed(2)
  

toFixed()方法将数字转换为字符串,保留一个   指定的小数位数。

答案 1 :(得分:1)

Javascript中的数字只能表示

形式的数量
n / (2**k)

nk都是整数。除此之外,对kn的大小也有限制。

换句话说,对于小数,唯一可以精确表示的量具有分母,该分母在一定范围内是2的整数幂。

数字1/10 = 0.1并且它的倍数在Javascript中没有完全表示(你可以认为它们相当于1/3 = 0.3333333 ...在基数10:没有2的幂会给你一个积分当乘以0.1时的数字,这是你观察到的问题的根源。

因此,任何在浮点数之间使用相等/不相等比较的代码至少是可疑的。当您使用近似数量时,即使a+b+c不一定等于c+b+a,因为内部必要的近似值将以不同的顺序发生。