【问题标题】:reference value in php for scoring (min x = 1, max y = 100)php 中用于评分的参考值(最小 x = 1,最大 y = 100)
【发布时间】:2014-06-03 12:23:12
【问题描述】:

我想做一个小分数,但我在数学上磕磕绊绊。我想你会处理它:-)我有一些价值观:例如124、426、100、24、41。最高的外壳是 MaxScore = 100(这里是 426),最小的 MinScore = 1(这里是 24)。 MaxScoreMinScore shell 之间的每个值(这里是 124,100,41)都有一个自己的分数,与最小值和最大值相关。

用php max(),我得到了

$max = max(124, 426, 100, 24, 41);

426 为最高,min()

$min = min(124, 426, 100, 24, 41);

24 作为最低值。美好的。

下一步可能是:426 = 100 和 24 = 1。但剩下的呢?计算是什么?如您所见,这不是程序员问题(还不是),而是数学问题。我希望我确实把自己说清楚了。谢谢!

【问题讨论】:

    标签: php math max min scoring


    【解决方案1】:
    好的,这似乎是工作。可能比需要更多的括号。
    $new_val = 1 + (($val - $min) * (99 / ($max - $min)))
    

    【讨论】:

    • 是的,就是这样!太棒了,你让我的一天......或夜晚。非常感谢!来自柏林的问候!晚安! span>
    • 没问题,我喜欢弄清楚这些小数学公式的东西。 span>
    【解决方案2】:

    您可以做的一件事是将每个值应用为$val * ($max - $min) / 100;

    编辑我倒过来了。它将是$val / (($max - $min) / 100); 这将$min$max 之间的差值分成100 份。因此,每件作品都将应用该比率。这将使 100 成为 100 / ((426 - 24) / 100) = 24.875,并将所有值减少到 1 到 100 之间的数字。

    编辑。为了让最小值为 1,最大值为 100 并保持分数之间的关系,我们需要应用比率并减去一个常数。

    经过验证的 Andrew Nee 的评论似乎可以解决问题。

    php -r "$a = array(123,426,100,24,41);print_r(array_map(function($val){$min=24;$max=426;return 1 + (($val - $min) * (99/($max - $min)));},$a));"
    
    Array
    (
        [0] => 25.380597014925
        [1] => 100
        [2] => 19.716417910448
        [3] => 1
        [4] => 5.1865671641791
    )
    

    【讨论】:

    • 如果你想考虑完整的分布,而不仅仅是最小/最大,那么你需要做更多的事情。请说明这是否更可取。
    • 但他希望最小值(在本例中为 24)为 1。您的公式会使最小值约为 6,对吗?
    • 是的,将 426 减少到 100 并将 24 减少到 1 将需要不同的功能。而且每个人的比例都会不一样。如果我们完全按照要求进行操作,不确定它是否能准确地描述彼此之间的原始分数。我以为他们并不确切知道他们想要什么,只是提出了一个想法,以使该范围内的所有数字具有偶数比率。我们需要在公式中添加一个常数。就是这样 - max(abs(0 - $max / (($max - $min) / 100)), abs(0 - $min / (($max - $min) / 100)))
    • 可能不需要最大值。让我检查一下我的数学。
    • 好吧,这似乎可行... 1 + (($val - $min) * (99 / ($max - $min)))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2012-02-22
    • 2016-09-30
    • 2016-05-21
    • 2018-08-08
    相关资源
    最近更新 更多