0

基本上,我正在编写一个允许用户发布体育赛事的网站。然后成员可以对每个事件进行评分。评分系统为 10 分制:0.5、1.0、1.5、2.0、2.5、3.0、3.5、4.0、4.5、5.0。

有四类:

组织,物有所值,设施,乐趣因素

float我使用字段将值存储在 mysql 数据库中。

我使用以下虚拟数据来测试系统。

  • org = 2,v4m = 4.5,fac = 4,fun = 2.5;
  • org = 3.5,v4m = 4,fac = 4.5,fun = 1.5;
  • org = 1,v4m = 5,fac = 4.5,fun = 2.5;

当基于上述显示事件评级时,我希望每个类别都四舍五入到上述 5 星评级系统。

到目前为止,我有以下代码,除了四舍五入之外,它似乎工作正常。

例如:目前三个组织评级的平均值是2.1666666666667我想四舍五入的2.0。如果要平均,4.6666666666667我希望它四舍五入4.5

但是我该怎么做呢?

到目前为止,这是我的代码:

// Count how many ratings this event has
        if($ratingCount = $event->getEventRatingCount($event_id)){

            // Get ratings for this event
            $eventRating = $event->getEventRatings($event_id);

            $organisation = 0;
            $valueForMoney = 0;
            $facilities = 0;
            $funFactor = 0;
            $overall = 0;



            foreach($eventRating AS $rating){
                $organisation   = ($organisation + $rating['organisation'] / $ratingCount);
                $valueForMoney  = ($ValueForMoney + $rating['value_for_money'] / $ratingCount);
                $facilities     = ($facilities + $rating['facilities'] / $ratingCount);
                $funFactor      = ($funFactor + $rating['fun_factor'] / $ratingCount);
            }
            echo '<br />';
            echo $organisation . '<br />';
            echo $valueForMoney . '<br />';
            echo $facilities . '<br />';
            echo $funFactor . '<br />';
            echo $overall = ($organisation + $valueForMoney + $facilities + $funFactor) / $ratingCount); 

        }else{
            // no ratings for this event
        }

使用虚拟数据,我目前得到以下值:

2.1666666666667
1.6666666666667
4.3333333333333
2.1666666666667
3
4

2 回答 2

4

您可以将评级乘以 2 以将其映射到 1..10 范围。然后将其四舍五入,然后除以 2。

$overall = round(2*$overall)/2;

这会将 4.666 映射到 4.5 并将 2.1666 映射到 2。3.888 的评级将向上取整为 4。如果您想始终向下取整,请使用floor而不是round.

于 2013-09-27T11:53:10.430 回答
0

将每个评级存储到数据库中的表中;例如表

身份证 | 评分

1 | 4.5

2 | 3.5

3 | 3.0

现在创建一个查询,该查询将从该表中获取所有值并创建所有结果的平均值

您基本上只是将所有结果存储在某个地方,然后计算出一个平均值

然后根据平均值创建一个 switch 或 if 语句来显示你想要的。

抱歉,数字/评级没有像我预期的那样出现......

于 2013-09-27T11:52:44.077 回答