【问题标题】:constrain proportions between intervals约束区间之间的比例
【发布时间】:2013-03-05 20:33:22
【问题描述】:

我正在尝试在 php 中创建一个用于集成评级系统的小类,但我遇到了一个可能很简单的问题。 我想显示 0 到 5 之间的评分,但投票可以在任何区间内,例如 1 到 10 或 1 到 12。 例如,如果票数的间隔为 1-12,总分/总票数为 6,我想实际显示 2.5 我目前正在使用这个

$rating = number_format(round(($total_score/$total_votes)*2)/2,1);

那么我怎样才能让它只显示 0-5 区间的值呢?

【问题讨论】:

  • 我在遵循您的术语时遇到了一些麻烦。能否举个详细的打分例子?
  • 我不明白你。 (虽然我认为我可以帮助你)你能进一步解释一下吗?
  • 好吧,您可以尝试获取百分比评级,然后将其转换为 5ths。例如:6/10 = .6、.6 * 5 = 3。
  • 注0-5从0开始,1-12从1开始,差别很大...
  • 是的,假设我将投票设置为 1-12 用户投票,当我使用上面的公式时,我得到 6 女巫是允许的间隔的一半,所以我想要的只是通勤到1-5 间隔,所以在这种情况下 6 将变为 2.5

标签: php rating


【解决方案1】:
$fromminrate = 1;
$frommaxrate = 12;
$tominrate = 0;
$tomaxrate = 5;
$rating = $tominrate + (
     ((($total_score/$total_votes)-$fromminrate)
     / ($frommaxrate-$fromminrate))
     * ($tomaxrate-$tominrate));

【讨论】:

【解决方案2】:

使用这样的简单百分比计算:

<?php

$number_of_votes = 10; // real votes
$max_number_of_votes = 12; // vote range
$max_display_votes = 5; // display range

$perc = $max_display_votes * $number_of_votes / $max_number_of_votes;
$display = intval(round($perc)); // optional, round and convert to int

echo $display;

作为投票范围 - 就其性质而言 - 从零开始,您不必担心下边界,并且可以简化您的计算。 ;)


解释:

$number_of_votes(10) 与 $max_number_of_votes(12) 相关,因为所讨论的值 ($display) 与 $max_display_votes (5) 相关。在数学方面:

$number_of_votes / $max_number_of_votes == $display / $max_display_votes;

或在示例中:

10 / 12 = $display / 5;

你可以通过乘以 5 来转换这个术语:

10 * 5 / 12 = $display;

这就是我的“公式”;)

【讨论】:

  • 这就是我从你的问题中理解的。真的很难理解你尝试了什么。请加强您的问题,我会提供更多帮助。顺便说一句,您使用一次投票一次得分。有什么区别?有区别吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
相关资源
最近更新 更多