如何解决Math.floor不适用于笛卡尔测试用例
我正在做一个编码挑战,要求我找到整数数组元素的舍入平均值。挑战有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);
Test.assertEquals(getAverage([1,3,4,5,]),3);
Test.assertEquals(getAverage([1,1,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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。