我的错误在这段代码中是什么?

时间:2014-11-05 02:02:59

标签: javascript debugging

我有这个:

if (dTotal % 1 !== 0 || nTotal % 1 !== 0) {
   //stuff  
}

并且变量nTotal是数字0.2,但if语句中的内容正在发生。我知道这两个变量是数字,而不是字符串。如果两者 nTotal和dTotal都是整数,我只想要if语句中的内容。

4 个答案:

答案 0 :(得分:3)

if (parseInt(dTotal) == parseFloat(dTotal)
 && parseInt(nTotal) == parseFloat(nTotal)) {
  alert("success");
}

如果两个都是数字,那么这将有效。

答案 1 :(得分:2)

if (!(dTotal % 1 !== 0 || nTotal % 1 !== 0))

在OR子句之前需要NOT。您的原始代码说:

如果dTotal的余数除以1不是0(意味着它不是整数)OR 如果nTotal的余数除以1不是0(意味着它不是整数),那么做一些事情......

你想要与此相反,所以添加感叹号就像我一样。

答案 2 :(得分:2)

正确答案来自@IsaacRay;你只是让测试的极性反转了。

对于它的价值,接受的答案比使用%慢十倍。

您还可以使用Math.floor,其速度与%

一样快
if (Math.floor(dTotal) === dTotal && Math.floor(nTotal) === nTotal) {

Math.floor基本上删除了数字的小数部分。通过将其与原始数字进行比较,我们可以看出该数字是否为整数。

如果可能,您可能会使用Number.isInteger,但速度非常慢;速度是偶数parseInt的两倍,是%Math.floor的二十倍。

JSPerf:http://jsperf.com/testing-if-a-number-is-an-integer

答案 3 :(得分:0)

dTotal % 1 !== 0 

那部分可能是真的,这就是if条件为真的原因。 (您正在使用或(||)not和(&&))