如何计算平均评级

本文关键字:计算 何计算 | 更新日期: 2023-09-27 18:01:44

对不起,如果我没有说清楚:

如何根据MinRate和MaxRate计算平均评级

例如:minRate = 0或1,MaxRate = 2或3或4或5或0

如何计算评级?

<

更新结束/strong>

我正在实现一个5星评级系统,我的表结构有两列:1) MinRate 2) MaxRate

所以我的问题是:如何计算平均评级?

这是我如何在我的5星评级实现。

int[] {7, 0, 0, 8, 5}; 

这意味着:

  • 7位用户给文章打了1分
  • 0用户给文章打了2分
  • 0个用户给文章打了3分
  • 8位用户给文章打了4分
  • 5位用户给文章打了5分

如何计算平均评级

int[] x =  {7, 0, 0, 8, 5}; 
/* 
    7 x 1 star
    0 x 2 stars
    0 x 3 stars
    8 x 4 stars
    5 x 5 stars
*/
float totalVoters = 0;
float totalPoints = 0;
for(i = 1; i <= x.length; i++)
{
    //add 7, 0, 0, 8, 5
    totalVoters += x[i];
    /* add
        7 x 1 star = 7,
        0 x 2 stars = 0,
        0 x 3 stars = 0,
        8 x 4 stars = 32,
        5 x 5 stars = 25
    */
    totalPoints += x[i] * i;
}
response.write(totalPoints/totalVoters); //get the average

我真的不懂ASP。. NET,但平均值只是总数除以项目数:

(int[0] + int[1] * 2 + int[2] * 3 + int[3] * 4 + int[4] * 5) / 5

所以在循环中(不会工作,因为int是保留的,但你知道的):

float average = 0;
for (int i = minrate; i < maxrate; i++) {
  average += int[i] * i;
}
average /= maxrate;

下面是一些伪代码:


double avg = 0;
for (int i = 0; i < arr.Length; i++) // arr.Length should be the same as MaxRate
{
    avg += arr[i] * (i + MinRate);
}
avg /= arr.length;

((7*1)+(8*4)+(5*5))/(7+8+5) = 3.2

我就是这么做的

   private static double GetRating()
        {
            int star5 = 12801;
            int star4 = 4982;
            int star3 = 1251;
            int star2 = 429;
            int star1 = 1265;
            double rating = (double)(5 * star5 + 4 * star4 + 3 * star3 + 2 * star2 + 1 * star1) / (star1 + star2 + star3 + star4 + star5);
            rating = Math.Round(rating, 1);
            return rating;
        }
        static void Main(string[] args)
        {
            double rating = GetRating();
            Console.WriteLine("Your product rating: " + rating);
            Console.ReadKey();
        }

这是我在5票中的5票中使用的解决方案:

// 36 = excellent (5), 49 = good (4), 17 = average (3), 5 = bad (2), 9 = terrible (1)
var values = new[] {36, 49, 17, 5, 9};
var result = GetRating(values).ToString(CultureInfo.InvariantCulture);
MessageBox.Show(result); // 3.84
public static double GetRating(int[] ratings)
{
    double ratingsSum = 0;
    double ratingsTotal = 0;
    for (var i = 1; i <= 5; i++)
    {
        ratingsSum += ratings[i - 1];
        ratingsTotal += i * ratings[5 - i];
    }
    var average = ratingsTotal / ratingsSum;
    return Math.Round(average, 2);
}