我正在进行一项编码挑战,要求我找到整数数组元素的四舍五入平均值。挑战有3个测试用例,其中2个通过了,除了最后一个没有通过,我不知道为什么。这是我的代码:
function getAverage(marks){
//TODO : calculate the downwar rounded average of the marks array
return Math.floor(marks.reduce((acc, cur) => {
return acc + cur;
})) / marks.length;
}
这些是测试案例:
Test.assertEquals(getAverage([2,2,2,2]),2);
Test.assertEquals(getAverage([1,2,3,4,5,]),3);
Test.assertEquals(getAverage([1,1,1,1,1,1,1,2]),1);
最后一个测试用例返回1.125而不是1,尽管我正在对结果进行四舍五入。这可能是什么原因?
您的括号是错误的。您将Math.floor()
应用于和,而不是应用于商。
前两个测试用例通过了,因为平均值已经是一个整数,所以不管你是否将其下限。
考虑以下两者之间的区别:
floor(1 + 1 + 1 + 1 + 1 + 1 + 1 + 2) / 8 = floor(9) / 8 = 9 / 8 = 1.125
和:
floor((1 + 1 + 1 + 1 + 1 + 1 + 1 + 2) / 8) = floor(9 / 8) = floor(1.125) = 1
您只在floor
中进行累加,而不是除法。你取整数和的底,然后除以它。分区应在楼层内移动:
function getAverage(marks) {
return Math.floor(marks.reduce((acc, cur) => {
return acc + cur;
}) / marks.length);
}