将评级转换为五星评级系统中的百分比


Convert rating to percentage in 5 star rating system

我的一个项目有一个五星评级系统。我想把每一颗星转换成百分比值。

这是我的数据库

star1
star2
star3
star4
star5
tot_stars
average

我用来获得评级的计算

$cal = ($star1*1 + $star2*2 + $star3*3 + $star4*4 + $star5*5)/$total_stars;
$avg = number_format($cal, 2);

我想知道的是,得到每颗恒星作为百分比的数学公式是什么

示例:Yelp.com在其网站中执行此操作

如果你的目标是获得(例如)1星评级的百分比,那么只需将star1除以评级的数量(我猜是tot_stars,尽管这个名字似乎暗示了其他意思)。这会给你一个比例;乘以100得到一个百分比。

例如,让数据库计算:

SELECT star1, star1 * 100 / tot_stars AS percent1, 
       star2, star2 * 100 / tot_stars AS percent2, 
       star3, star3 * 100 / tot_stars AS percent3, 
       star4, star4 * 100 / tot_stars AS percent4, 
       star5, star5 * 100 / tot_stars AS percent5
  FROM starsTable

或者用PHP:

<?php     
// Example data
$star1 = 1;
$star2 = 5;
$star3 = 7;
$star4 = 10;
$star5 = 8;
$tot_stars = $star1 + $star2 + $star3 + $star4 + $star5;
for ($i=1;$i<=5;++$i) {
  $var = "star$i";
  $count = $$var;
  $percent = $count * 100 / $tot_stars;
  for ($j=1;$j<=5;++$j) {
    echo $j <= $i ? "☆ " : "  ";
  }
  printf("'t%2d (%5.2f%%)'n", $count, $percent,2);
}
?>

哪个输出:

☆            1 ( 3.23%)
☆ ☆          5 (16.13%)
☆ ☆ ☆        7 (22.58%)
☆ ☆ ☆ ☆     10 (32.26%)
☆ ☆ ☆ ☆ ☆    8 (25.81%)

我提出了一个解决方案,它是一个函数,它得到一个数组,该数组的值为星号。我们计算到总值,然后逐个计算百分比。我们返回百分比。每个百分比将对应于输入中具有完全相同索引的星。

function getPercentages($inputValues) {
    $totalValues = 0;
    foreach ($inputValues as $inputValue) {
        $totalValues += $inputValue;
    }
    $outputValues = array();
    foreach ($inputValues as $key => $inputValue) {
        $outputValues[$key] = 100 * $inputValue / $totalValues;
    }
    return $outputValues;
}

我建议在数据库中进行计算,并让它返回一个浮点值。通过这种方式,你可以很容易地显示那些"百分比"风格的星星。

示例:

SELECT (CAST(
          (star1*1) + (star2*2) + (star3)*3 + (star4*4) + (star5*5) 
        as float)/15) as percentageStars

举个例子:

  • 五星:80-100
  • 4星:60-80
  • 三星:40-60
  • 2颗星:20-40
  • 1颗星:0-20

由于你知道1颗星跨越20分,你可以很容易地将1分作为答案星的填充因子的5%。我想你会尝试在之后将其转换为css属性,以显示星形,对吧?

示例:你得到的评分是。。。拉茨说4.8。这意味着你可以使用全值作为恒星总数,也就是4。战后,您可以使用模(%1)来获得剩余值。例如,这个rest值可以乘以100来获得css的百分比填充因子。

公式:4.8%1 = 0.8 * 100 = 80

希望这对你有帮助?