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

4

6 回答 6

5

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

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

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

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

于 2012-12-06T22:41:04.843 回答
2

获取值时将值解析为数字:

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

现在,whenpairs是一个数字,您不必专门检查零,因为0 * 2计算得很好:

counted_pairs = pairs * 2;
于 2012-12-06T22:42:46.943 回答
2

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

于 2012-12-06T22:43:42.317 回答
2

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

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

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

males = parseInt($('#'+item_id + '_males').val(), 10);
于 2012-12-06T22:45:08.577 回答
1

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

total_fishes = (parseFloat(males) + parseFloat(females) + parseFloat(counted_pairs));
于 2012-12-06T22:41:03.063 回答
0

改变 total_fishes = (males + females + counted_pa​​irs); 对此:

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

起作用,我知道这看起来很奇怪,但是当你使用 * 1 + 值 * 1 时,Javascript 会将变量转换为数字。我无法解释为什么,但几年前我在 cPanel x 中看到了这种和平的代码,我使用很多。

编辑:

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

测试代码:

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

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

于 2012-12-06T22:40:23.213 回答