简单的计算不起作用

时间:2012-12-06 22:38:57

标签: javascript jquery

我想提醒计算的总金额,但我不知道为什么而不是计算它只是附加值。

代码:

    $('#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似乎附加不计算?

6 个答案:

答案 0 :(得分:5)

你需要做一个数字加法。你所拥有的是字符串连接。

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

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

注意:我没有申请count_pairs,因为它是一个数字,因为counted_pairs = pairs*2;

答案 1 :(得分: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;

答案 2 :(得分:2)

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

答案 3 :(得分:2)

在if语句之前将值转换为整数...

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

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

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

更改total_fishes =(男性+女性+ counts_pairs);对此:

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

这个工作,我知道这看起来很奇怪,但当你使用* 1 +值* 1时,Javascript会将变量转换为数字。我无法解释原因,但我看到了代码的安静几年前在cPanel x中,我经常使用它。

编辑:

当您使用用户输入时,实际上存在差异,您可以使用isNaN检查值是否错误,当您使用parseInt时这将无效,因为它会抑制错误并尝试创建整数。

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");   
}​

结果:仅显示第一个警报屏幕。