2014-11-05 45 views
-1

我有这样的:这段代码中的错误是什么?

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

和变量n总计是多少0.2,但在if语句发生的东西。我知道这两个变量是数字,而不是字符串。我只是想要在if语句中发生的事情发生,如果 nTotal和dTotal是整数。

+0

的可能重复[?如何检查变量是否在Javascript的整数(http://stackoverflow.com/questions/14636536/how-to-check-if-a-变量是一个整数在JavaScript中) – 2014-11-05 02:06:21

+0

'0.2%1 === 0.2',你可以在Javascript控制台中测试 – 2014-11-05 02:07:09

+0

dTotal的值是什么? – 3Dom 2014-11-05 02:10:54

回答

2

正确的答案是从@IsaacRay;你只是将测试的极性颠倒过来。

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

你也可以使用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

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

您的OR子句之前需要一个NOT。你的原始代码是这样说的:

如果dTotal除以1的余数不是0(意思是它不是一个整数)或 如果nTotal除以1的余数不是0(意思是它不是一个整数)东西...

你想要的是相反的,所以添加感叹号,因为我已经做了。

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

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

+0

我是Javascript的超级新手,所以我对它不太了解,那到底是干什么的? – CPC 2014-11-05 02:15:24

+0

parseInt将字符串或整数转换为其整数值,因此1.2 => 1. parseFloat的作用与浮点相同,因此1.2 => 1.2。当你比较两者时,因为parseInt总是变为一个整数,所以只有当提供的数字是一个整数时它们才可以相同。 – emmaaaah 2014-11-05 02:16:55

0
dTotal % 1 !== 0 

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