2014-03-29 75 views
1

我有一个JavaScript验证问题。验证中的计算不匹配

在if条件中,我正在检查几个文本框值,它们总是小数,但if条件为以下返回true! (我检查了铬控制台中的数字)。

76.02 != 61.02 + 15

但是它返回以下错误。

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()); 
} 

谢谢。

+0

你可以发布你的代码..... –

+0

@CJRamki我更新了我的问题 – Bharadwaj

回答

1

尝试使用圆形()或在产油虽情况.toFixed()

(12121.3243434).toFixed(2) 

的toFixed()方法的数转换成一个字符串,保持小数的 指定数量。

+0

这解决了我的问题,但你能告诉我为什么'61.02 + 15 = 76.02000000000001'? – Bharadwaj

+0

检查此主题http://stackoverflow.com/questions/4345768/javascript-calculation-error获取答案 –

1

号在Javascript只能代表数量是形式

n/(2**k) 

其中两个nk是整数。除此之外,对于kn可以有多大也有限制。

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

数字1/10 = 0.1及其倍数不是完全用Javascript表示的(您可以认为它们相当于1/3 = 0.3333333 ...在基数10中:没有两个幂会给你一个整数乘以0.1),这是你观察到的问题的根源。

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