Math.floor 不适用于 cartian 测试用例
Posted
技术标签:
【中文标题】Math.floor 不适用于 cartian 测试用例【英文标题】:Math.floor not working for cartian test case 【发布时间】:2020-12-16 09:25:00 【问题描述】:我正在做一个编码挑战,要求我找到整数数组元素的四舍五入平均值。挑战有 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,即使我将结果四舍五入。这可能是什么原因?
【问题讨论】:
【参考方案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
【讨论】:
【参考方案2】:你只在floor
内做你的积累,而不是分裂。你取整数和的底,然后除以它。分区应该在地板内移动:
function getAverage(marks)
return Math.floor(marks.reduce((acc, cur) =>
return acc + cur;
) / marks.length);
【讨论】:
以上是关于Math.floor 不适用于 cartian 测试用例的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript Math.floor方法(对数值向下取整)
Math.Floor() 和 Math.Truncate() 之间的区别