用php表示的评分参考值(最小x=1,最大y=100)
我想做一个小计分,但我在数学方面有点磕磕绊绊。我想你会处理它:-)我有几个值:例如124426100,24,41。最高的外壳应为MaxScore=100(此处为426),最低的MinScore=1(此处为24)。MaxScore和MinScore shell之间的每个值(这里是124100,41)都有一个自己的分数,与最小值和最大值相关 使用php max(),我可以 426作为最高值和最小值() 24作为最低值。好的用php表示的评分参考值(最小x=1,最大y=100),php,math,max,min,scoring,Php,Math,Max,Min,Scoring,我想做一个小计分,但我在数学方面有点磕磕绊绊。我想你会处理它:-)我有几个值:例如124426100,24,41。最高的外壳应为MaxScore=100(此处为426),最低的MinScore=1(此处为24)。MaxScore和MinScore shell之间的每个值(这里是124100,41)都有一个自己的分数,与最小值和最大值相关 使用php max(),我可以 426作为最高值和最小值() 24作为最低值。好的 下一步可能是:426=100和24=1。其余的呢?计算结果是什么?正如你所看
下一步可能是:426=100和24=1。其余的呢?计算结果是什么?正如你所看到的,这不是一个程序员的问题(还没有),而是一个数学问题。我希望我已经说清楚了。谢谢大家! 您可以做的一件事是将每个值应用于
$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
)
好的,这似乎有效。可能放了比需要更多的括号
$new_val = 1 + (($val - $min) * (99 / ($max - $min)))
如果您想考虑完整的分布,而不仅仅是最小值/最大值,那么您需要做更多的工作。请说明这是否更可取。但他希望最小值(在本例中为24)为1。你的公式将使最小值约为6ish,对吗?是的,将426减少到100,将24减少到1将需要一个不同的函数。而每一个的比例会有所不同。如果我们完全按照要求去做的话,不确定它是否能准确地描绘出彼此之间的原始分数。我以为他们不知道自己想要什么,只是想出了一个办法,让所有的数字都在一个偶数比例的范围内。我们需要在公式中加一个常数。所以-max(abs(0-$max/($max-$min)/100)),abs(0-$min/($max-$min)/100))
max可能不是必需的。让我检查一下我的数学。好的,这似乎可行。。。1+($val-$min)*(99/($max-$min)))是的,就是它!太棒了,你让我很开心。。。或者晚上。非常感谢你!来自柏林的问候!晚安没问题,我喜欢算出这些数学公式。
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
)
$new_val = 1 + (($val - $min) * (99 / ($max - $min)))