什么'这是我的错误代码

What's my bug in this code?

本文关键字:我的 错误代码 什么      更新时间:2023-09-26

我有这个:

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

变量nTotal是数字0.2,但if语句中的内容正在发生。我知道这两个变量是数字,而不是字符串。我只希望if语句中的事情发生在nTotal和dTotal都是整数的情况下。

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

如果两个都是数字,那么这将起作用。

正确答案来自@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

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

OR子句之前需要一个NOT。你原来的代码是:

如果dTotal除以1的余数不为0(意味着它不是整数)或如果nTotal除以1的余数不是0(意味着它不是整数),那么做点什么。。。

你想要的是相反的,所以像我一样加上感叹号。

dTotal % 1 !== 0 

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