2012-04-05 76 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

相关问题