我正在计算图表的标准偏差,虽然我得到了图表上每个点的平方的正确值,但我无法得到平方值的总和。我应该得到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
答案 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中,它会使数字成为可能导致意外结果的字符串。