Javascript 简单的计算不起作用

Javascript 简单的计算不起作用,javascript,jquery,Javascript,Jquery,我想提醒总金额计算,但我不知道为什么它只是计算附加值 守则: 如果我在表格中加上1对1公1母,它应该显示4个总数,但它显示的111似乎不算什么?改变总数=公鱼+母鱼+计数的鱼对;为此: total_fishes = ((males * 1 + females * 1) * 1 + counted_pairs * 1); 这会起作用的,我知道这看起来很奇怪,但是当你使用*1+值*1时,Javascript会将变量转换成数字。我无法解释为什么,但几年前我在cPanel x中看到了这种代码的平静,我

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

守则:


如果我在表格中加上1对1公1母,它应该显示4个总数,但它显示的111似乎不算什么?

改变总数=公鱼+母鱼+计数的鱼对;为此:

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

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

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

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

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

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


注意:我还没有申请计数对,因为它将是一个数字,因为计数对=对*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;

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

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

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

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

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

没有任何理由在这里使用乘法。@T.J.Crowder将字符串转换为数字是一种简写方法。@Vega:将字符串转换为数字是一种糟糕的技巧。parseInt或parseFloat更好,因为它们允许您控制使用的基数,这样您就不会得到意外的结果。至少,如果你坚持让自己面对那些意外的结果,使用一元+或Numberstr而不是乘法。这也不应该是可接受的答案,因为不带基数的parseInt也会给出意外的错误val返回一个字符串。您需要以某种方式将值转换为数字。将字符串转换为数字的方法包括Numberstring、string*1、string+0、parseIntstring、parseFloatstring、string/1,可能还有其他方法。实际上string+0不起作用。@shMiddy的可能重复:最好是parseInt或parseFloat,最直接的是一元+。为什么要投反对票?如果你不解释你认为是错的,那就不能改善答案。我认为这和你的答案是一样的。是的,他在我写我的答案时发布了他的答案。当我提交我的页面时,页面刷新了,然后我看到了他的页面。@user1494854:请确保在生产中使用此页面+1.
counted_pairs = pairs * 2;
pairs = parseInt($('#'+item_id+'_pairs').val(), 10);

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

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