2014-11-05 71 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條件爲真的原因。 (您正在使用或(||)不和(& &))