2012-12-06 190 views
0

我想提醒计算的总量,但我不知道为什么,而不是计算它只是附加值。简单的计算不起作用

的代码:

$('#main button').click(function(){ 
    id = $(this).attr('id'); 
    parts = id.split('_'); 
    item_id = parts[0]; 
    pairs = $('#'+item_id+'_pairs').val(); 
    females = $('#'+item_id + '_females').val(); 
    males = $('#'+item_id + '_males').val(); 
    if(pairs >0){ 
     counted_pairs = pairs*2; 
    }else{ 
     counted_pairs = 0; 
    } 
    total_fishes = (males + females + counted_pairs); 
    alert(total_fishes); 
}); 

如果我添加1对1只雄性和在形式1只雌性它应该显示4总但其示出了111似乎不追加计算?

+1

'val'返回一个字符串。您需要以某种方式将值转换为数字。 – Shmiddty

+0

将字符串转换为数字的方法包括Number(string),string * 1,string + 0,parseInt(string),parseFloat(string),string/1和可能其他方法。 – Shmiddty

+2

其实'string + 0'不起作用。 – Shmiddty

回答

0

更改total_fishes =(男性+女性+ counting_pairs);为此:

total_fishes = ((males * 1 + females * 1) * 1 + counted_pairs * 1); 

的工作,我知道这看起来很奇怪,但JavaScript中的变量转换为数字时u使用* 1 +值* 1。我无法解释为什么,但我看到的这个和平几年前在cPanel x中编写代码,我使用它很多。

编辑:

其实是有当您使用用户输入您可以检查是否值使用isNaN当你使用parseInt函数,因为它supresses错误,并试图建立一个整数,这是不行的是错误的差异无论如何。

TestCode:

var males = "2,4"; 
var females = "3"; 
var counted_pairs = "33"; 

var result = ((males * 1 + females * 1) * 1 + counted_pairs * 1); 
var resultb = (parseInt(males) + parseInt(females * 1) + parseInt(counted_pairs)); 

if (isNaN(result)) { 
alert("Input is wrong my method"); 
} 

if (isNaN(resultb)) { 
alert("Input is wrong using parseint"); 
}​ 

结果:只有第一个警报屏幕将显示。

+2

**有零**原因可以将乘法放入此处。 –

+0

@ T.J.Crowder它是将字符串转换为数字的简写形式。 – Shmiddty

+0

@ T.J.Crowder转换为数字是一个古老的技巧。 –

1

您正在连接字符串,而不是添加值。使用parseFloatparseInt添加数字。

total_fishes = (parseFloat(males) + parseFloat(females) + parseFloat(counted_pairs)); 
5

你需要做一个数字加法。你有什么是字符串连接。

尝试使用parseInt将其转换为数字。

total_fishes = (parseInt(males, 10) + parseInt(females, 10) + counted_pairs); 

注:我没有申请counted_pa​​irs因为这将是一个数,因为counted_pairs = pairs*2;

+0

@ user1494854:确保你在生产中使用它。 +1 – naveen

2

解析为数字,当你让他们:

pairs = parseInt($('#'+item_id+'_pairs').val(), 10); 
females = parseInt($('#'+item_id + '_females').val(), 10); 
males = parseInt($('#'+item_id + '_males').val(), 10); 

现在,当pairs是一个数字,你不必具体检查零,因为0 * 2会计算得很好:

counted_pairs = pairs * 2; 
+0

为什么downvote?如果你不解释你认为是错误的,它不能改进答案。 – Guffa

+0

downvoter,可能不喜欢347k,你会看到:) – naveen

2

如果您添加的其中一个变量包含字符串值,则JavaScript将相互追加值,就像所有字符串一样。确保你所有的变量都有整数值;否则通过解析将它们转换为整数,如其他建议。

2

您的if语句之前将您的值的整数...

pairs = parseInt($('#'+item_id+'_pairs').val(), 10); 

females = parseInt($('#'+item_id + '_females').val(), 10); 

males = parseInt($('#'+item_id + '_males').val(), 10); 
+0

我认为这与[Guffa](http://stackoverflow.com/a/13753962/297641)的回答相同。 –

+0

是的,他在写我的时候发布了他的答案。当我提交我的,页面刷新,然后我看到他的。 –