2017-02-17 91 views
1

我正在计算图形的标准偏差,虽然我得到了图形上每个点的平方的正确值,但我无法获得平方值的总和。我应该得到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 
+1

你为什么要改变与''。 toFixed(2)'到一个字符串化的float,然后解析回一个int,失去浮动部分?你尝试过parseFloat()吗? – Shilly

+1

你认为'parseInt'的“Int”部分是什么意思? –

+1

你得到'2 + 1 + 5 + 6 = 14'使用'parseFloat()'代替 – JohnnyAW

回答

1

没有理由让你在这里使用parseInt,除非你只想总结平方的整数部分。

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

+1

将它更改为parseFloat,因为他将乘法的浮点数更改为带有toFixed的字符串(2) – Shilly

+0

对,我错过了第一次通读该部分的部分。当SO停机维修时,我正要编辑我的答案。 –

0

由于parseInt这个字符串,你得到的是整数和而不是小数。只需使用parseFloat就可以了。

1

你不应该使用parseInt,因为它的浮点值转换为整数,这意味着每个产品都被夷为平地:

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); 
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中,它使数字到这会导致意外的结果字符串。