【发布时间】:2019-07-01 23:09:00
【问题描述】:
不知道为什么会出现这个问题,但由于某种原因,我得到了错误的输出。我正在尝试做的是采用现有的平均收视率并生成一个新的收视率。我目前正在解决的情况是,已经计算出平均值的用户需要更改其值。
例如:
User A rates at 5 stars
User B rates at 3 stars
User C rates at 5 star
当前平均星数为:13/3 或 4.333
现在,如果用户 B 更改了他们的评分,而我不想循环浏览所有评分,我只想说:
鉴于我知道有 3 个评分,而我正在将用户 C 更改为 3,那么我想我可以做到:
13-5 = 8
8 + 3 = 11
11/3 = new average 3.667
var originalRatingVal = originalRating.rating ? originalRating.rating.stars : 0
var currentNumberOfRatings = currentItem.count ? currentItem.count.ratings : 0
var currentAverageTotal = currentNumberOfRatings * overall_rating
var oldNumberOfRatings = currentNumberOfRatings - 1
var newAverage = (currentAverageTotal - originalRatingVal) - oldNumberOfRatings
var newRatingVal = currentRating.rating ? currentRating.rating.stars : 0
var newNumRatings = oldNumberOfRatings + 1;
var oldRatingTotal = newAverage * oldNumberOfRatings;
var newAvgRating = (oldRatingTotal + newRatingVal) / newNumRatings;
这似乎不起作用:
如果我将用户 B 更改为 5,期望 newAvgRating 等于 5,它当前等于 5.666666666666667。
任何想法都将不胜感激,谢谢!
【问题讨论】:
-
我很难相信将 B 更改为 5 会得到 5.666666666666667,5.666666666666667 实际上是 17/3。也许这就是开始修复代码的地方
-
不知道你为什么不相信,因为那是代码,我运行代码,我得到了答案。不知何故,oldrating = newrating val 增加了 17
-
另外,我的错误是一个超级简单的错字,var newAverage... "- oldNumberOfRatings" 应该是 "... / oldNunberOrRatings"
-
您能否使用 sn-p 编辑器缩进代码并为变量分配值以使事情更容易弄清楚
标签: javascript logic average