Не уверен, почему возникает эта проблема, но по какой-то причине я получаю неправильный вывод.То, что я пытаюсь сделать, это взять существующее среднее количество оценок и создать новое.В данный момент я решаю вопрос, когда пользователь, который уже рассчитал среднее значение, должен изменить свое значение.
Например:
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.
Любые идеи будут чрезвычайно признательны, спасибо!