算术给出错误的结果

时间:2013-10-03 10:44:10

标签: javascript

我需要评估以下表达式的结果:

startCell = 50
size = 9
cnt = 1
var res = startCell + (size * cnt) + cnt

但如果我发出警告res,我就会得到591.我应该得到的是60.我试过这个:

var res = eval(startCell + (size * cnt) + cnt); 

但它仍然给了我591.为什么会这样?

2 个答案:

答案 0 :(得分:0)

确保添加整数而不连接某些字符串

var res = parseInt(startCell)+(parseInt(size)*parseInt(cnt))+parseInt(cnt);

答案 1 :(得分:0)

您发布的代码没有任何问题。 证明:http://jsfiddle.net/Q8M7S/

问题的原因在于我们看不到的代码。有些东西会将cnt转换为字符串,但startCellsize仍为数字。如果它们都是字符串,那么您将获得5091而不是591 http://jsfiddle.net/Q8M7S/1/

可能是cnt被初始化为字符串:

startCell = 50
size = 9
cnt = "1"

或者它可以初始化为数值,但随后通过JavaScript的类型强制转换为字符串:

cnt = 1
cnt += ""

有很多方法可以实现,没有人看到代码就无法确定。我建议您查找在初始化它和使用它之间修改cnt的每一行。

另外,请注意eval。如果使用不当会有危险,而且性能很糟糕。您应该尽可能避免在任何技能级别使用eval