无法做出正确的总和

时间:2017-02-17 13:51:49

标签: javascript standards standard-deviation

我正在计算图表的标准偏差,虽然我得到了图表上每个点的平方的正确值,但我无法得到平方值的总和。我应该得到17.20但是我得到了14。它似乎只是添加第一个数字而不是小数位。这是我的代码:

var1 = (var1 * var1).toFixed(2); //alert(var1); getting 2.56
var2 = (var2 * var2).toFixed(2); //alert(var2); getting 1.96
var3 = (var3 * var3).toFixed(2); //alert(var3); getting 5.76
var4 = (var4 * var4).toFixed(2); //alert(var4); getting 6.76
var5 = (var5 * var5).toFixed(2); //alert(var5); getting 0.16

var sum = (  parseInt(var1)+parseInt(var2)+parseInt(var3)+parseInt(var4)+parseInt(var5) ).toFixed(2);

alert(sum); // should get 17.20, but getting 14

4 个答案:

答案 0 :(得分:1)

除非您只想对方块的整数部分求和,否则您没有理由在这里使用.htaccess

parseInt“解析一个字符串并返回一个整数。”如果您将每个方格的parseInt次调用更改为parseInt,它将正确解析字符串中的浮点值并对其求和。

答案 1 :(得分:1)

您不应该使用parseInt,因为它会将您的Float值转换为整数,这意味着每个产品都被展平:

2 + 1 + 5 + 6 + 0 = 14

要获得正确的结果,您还可以写:

var1 = Math.pow(var1, 2);
var2 = Math.pow(var2, 2);
var3 = Math.pow(var3, 2);
var4 = Math.pow(var4, 2);
var5 = Math.pow(var5, 2);

var sum = var1 + var2 + var3 + var4 + var5;

alert(sum.toFixed(2));

或者写少行:

var fixedSum = [var1, var2, var3, var4, var5].reduce(function(acc, curr){
  return acc + Math.pow(curr, 2)
}, 0).toFixed(2);

答案 2 :(得分:0)

您获取整数和而不是小数,因为您parseInt字符串。只需使用parseFloat代替就行了。

答案 3 :(得分:0)

这是因为您正在将每个变量解析为整数,从而切断小数位

整数是整数,所以你的实际操作是:

var1 2.56->2  + var2:1.96->1 ...
parseInt(var1)+parseInt(var2)+parseInt(var3)+parseInt(var4)+parseInt(var5) ).toFixed(2);

你想要删除ParseInt并将它们总结为:

sum = (var1 + var2 + var3 + var4 +var5).toFixed(2);

我还建议你只使用一次(使用toFixed),因为连续舍入会降低精度,而在Javascript中,它会使数字成为可能导致意外结果的字符串。