用php计算平均数

Posted

技术标签:

【中文标题】用php计算平均数【英文标题】:Math average with php 【发布时间】:2011-01-03 09:29:38 【问题描述】:

是时候测试你的数学技能了...

我在用php求$num1、$num2、$num3等的平均值;最多不定数量的数字。然后它将平均值保存到数据库中。

下次调用 php 脚本时,会添加一个新号码。

是否有一个数学(很可能是代数)方程,我可以使用它来找到包含新数字的原始数字的平均值。还是我需要将原始数字保存在数据库中,以便我可以查询它们并重新计算整个数字?

【问题讨论】:

【参考方案1】:
array_sum($values) / count($values)

【讨论】:

我怎么没想到这个哈哈 $values 为空时除以零 $avg = 0; if(count($values)) $avg = array_sum($values) / count($values); 【参考方案2】:

如果您所说的平均值是“平均值”,并且您不想存储所有数字,则存储它们的计数:

$last_average = 100;
$total_numbers = 10;
$new_number = 54;

$new_average = (($last_average * $total_numbers) + $new_number) / ($total_numbers + 1);

【讨论】:

$total_numbers 可能不可用。 $total_numbers 是指定问题的必需实现细节。要么实现它,要么问题无法解决。 这将导致越来越多的准确性损失。使用 $last_total 而不是 $last_average。请参阅 Mike 的回答。 啊,真的,没想到。最好也保留 $last_sum。【参考方案3】:
Average = Sum / Number of values

只需存储所有 3 个值,不需要任何复杂的东西。

如果您存储AverageSum 然后计算Number of values,由于平均值的截断,您会损失一点准确性。

如果您存储 AverageNumber of values 然后计算 Sum 您将失去更多的准确性。由于 Number of values 是一个整数,您在计算 Number of values 的正确值时比 Sum 有更大的误差余地。

【讨论】:

你不需要存储平均值,你可以在不损失任何精度的情况下计算它。【参考方案4】:
<?php
function avrg()

 $count = func_num_args();
 $args = func_get_args();
 return (array_sum($args) / $count);

?>

http://php.net/manual/en/function.array-sum.php#101727

【讨论】:

【参考方案5】:

认为我应该分享我的功能

function avg($sum=0,$count=0)
    return ($count)? $sum / $count: NAN;

var_dump( avg(array_sum($values),count($values)) );

将返回平均值并考虑 0,例如除以零总是返回 NaN(非数字)

1/0 = NaN 0/0 = NaN

【讨论】:

【参考方案6】:

如果您知道可以计算旧总和的数字数量,请将新数字相加,然后除以旧数字加一。

$oldsum = $average * $amount;
$newaverage = ($oldsum + $newnum) / ($amount + 1);

【讨论】:

@slebetman - 但这与您接受的答案相同。 啊.. 抱歉,我看错了代码。我收回我之前的评论。【参考方案7】:

通常您可能会保存两条信息:

所有数字的总和 数字计数

当您想获得平均值时,将总和除以计数(当然要注意计数 == 0 的情况)。每当您想包含一个新数字时,请将新数字添加到总和中并将计数加 1。

【讨论】:

【参考方案8】:

这称为“运行平均值”或“moving average”。

如果数据库存储平均值平均值的数量,则可以为每个新值计算新的运行平均值。

【讨论】:

【参考方案9】:
function avgvals($avg_vals,$avg_delimiter=',')  
 if ( (is_string($avg_vals) && strlen($avg_vals) > 2) && (is_string($avg_delimiter) && !empty($avg_delimiter)) )  
    $average_vals = explode($avg_delimiter, $avg_vals); 
        $return_vals = ( array_sum($average_vals) / count($average_vals) ); 
  elseif ( (is_string($avg_vals) && strlen($avg_vals) <= 2) && (is_string($avg_delimiter) && !empty($avg_delimiter)) )  
        $return_vals = $avg_vals; 
  else  
        $return_vals = FALSE; 
  
   return $return_vals; 

【讨论】:

【参考方案10】:

代码:

function avg($list)
    $sum = array_sum($list);
    $count = count($list);
  return ($count)? $sum / $count: NAN;

print ("Average: ".avg([1,2,3,4,5]));

输出:

Average: 3

【讨论】:

【参考方案11】:

您需要将所有原始号码保存在数据库中。

【讨论】:

以上是关于用php计算平均数的主要内容,如果未能解决你的问题,请参考以下文章

怎么用c语言计算平均数

PHP 给定的时间长度的金黄平均计算器

用CASIO计算器算平均数与方差

excel怎样用SUMIF来计算平均年龄

计算PHP中一系列XML元素的平均值

在PHP中计算两种颜色之间的平均颜色,使用索引号作为参考值