2012-04-05 71 views
0

爲什麼rfd_total > max_rfd是真的?我不明白rfd_total如何能在下面的代碼大於max_rfd爲什麼在這段代碼中一個變量大於另一個變量?

max_rfd = parseFloat(jQuery('#mx-rfd_'+order_id).val()).toFixed(2); 

rfd_total = parseFloat(items_total+tax_total+shipping+allowances*1).toFixed(2); 


if(rfd_total > max_rfd) 
{ if(isNaN(rfd_total)) alert('rfd_total isNaN'); // not triggered 
    if(isNaN(max_rfd)) alert('max_rfd isNaN'); // not triggered 
    alert(rfd_total); // alerts 51.16 
    alert(max_rfd); // alerts 102.32 
    return false; 
} 
+0

在那裏得到一個的console.log(max_rfd,rdf_total)。獲取Chrome開發工具或Firebug並查看輸出。你將能夠看到他們的價值觀,以及他們是否是字符串或數字) – 2012-04-05 00:44:21

+0

在快速測試if語句做,如果((rfd_total * 1)>(max_rfd * 1)),那麼它應該轉換爲數字。這應該會產生你想要的結果。如果確實如此,則將其應用於替換parseFloat的初始變量。編輯:格里芬指出,toFixed()返回一個字符串。所以如果你想使用該方法,在toFixed()之後乘以1。 – 2012-04-05 00:45:31

+0

@MikeDepies ,你可以看到我只好使出在設置rfd_total的* 1的方法,但同樣,我不明白的是,爲什麼既不isNaN(rfd_total)NOR isNaN(max_rfd)返回true? – WallabyKid 2012-04-05 00:54:46

回答

4

這是因爲rfd_totalmax_rfd都是字符串。

你會發現,"51.16" > "102.32"返回true。

toFixed()返回一個字符串。

你需要強迫你的變量數字,你可以找到如何使用快速搜索做。

,也可以使用適當的功能讓你的代碼乾淨,做像這樣的一個

function decimalRoundTo(n, decimalPlaces) { 
    var d = Math.pow(10, decimalPlaces); 
    return Math.round(n*d)/d; 
} 
+0

好吧,你去!新聞給我。這很好解釋了這一點。 我從來不知道要修改()重新調用一個字符串! ...但是,不會isNaN()返回false? – WallabyKid 2012-04-05 00:49:28

+0

@WallabyKid,你說得對,'isNaN'返回'false'。這就是爲什麼你的警報沒有被觸發。我已經添加了一點,以我的答案順便說一句。 – Griffin 2012-04-05 00:54:09

+0

通過返回false我的意思是返回true!例如rfd_total isNaN,因爲它是一個字符串。對? – WallabyKid 2012-04-05 00:58:07

相關問題