PHP - 求和十进制值数组

时间:2009-06-22 19:09:02

标签: php floating-point decimal sum

我正在尝试计算PHP中十进制值数组的总和,但由于某种原因,它会四舍五入为整数。

例如:

$oldArray = array(0.00,1000.11,988.92,978.22,964.01,953.07,948.82,917.26,902.56,913.21,904.08,898.86,892.79);
$myVar = 0.0;
for($k=1;$k<10;$k++)
{
$myVar += $oldArray[$k];
}
print_r($myVar);

$ oldArray实际上是用SQL查询中的十进制值填充的($ oldarray的长度大约是几百,但我想要前10个。 在上面的例子中,我期望$ myVar是一个小数,但事实证明它只是一个整数。我尝试在for循环之前设置$ myVar = 0.0000,我尝试了$ myVar + = $ oldArray [$ k] + 0.0000等,但似乎没有任何效果。

我做错了什么?如何将$ myVar显式设置为小数?

4 个答案:

答案 0 :(得分:11)

鉴于这似乎无法重现,对我而言,这听起来像是PHP环境本身的问题。

检查php.ini是否有一个名为“precision”的设置,并确保将其设置为默认的14位有效数字。我无法想象为什么会改变这种情况,但肯定会产生影响。

答案 1 :(得分:4)

您可以尝试使用array_sum()代替并使用(float)来转换值。另外,我会确保数组中的值格式正确(1.45而不是1,45)。 HTH。

<强>更新

顺便说一下。你可以使用“is_float()”来检查数组中的每个参数。

答案 2 :(得分:3)

无法重现这一点。

php > $oldArray = array(0, .1, .2, .3, .4, .5, .6, .7, .8, .9);                                                    
php > $myVar = 0.0;
php > for($k=0;$k < count($oldArray);$k++)
php > {
php { $myVar += $oldArray[$k];
php { }
php > print_r($myVar);
4.5
编辑:我在评论中尝试了代码,没关系。像AlbertoPL一样,我怀疑问题出在其他地方。

php > $oldArray = array(0.01,1000.11,988.92,978.22,964.01,953.07,948.82,917.26,902.56,913.21,904.08,898.86,892.79);
php > $myVar = 0.0000;
php > for($k=1;$k<10;$k++)
php >   $myVar += $oldArray[$k];
php > print_r($myVar);
8566.18

答案 3 :(得分:0)

制作自己的实施:

function sum_array($arr){
 $count = 0;
  foreach ($arr as $val){
    if (!is_numeric($val) // neglect any non numeric values
      {
        $error = true;
        continue;
      }
      else{
        $count = $count + ($val*1); //casting to numeric if the value supplied as string
      }
  }
  return $count
}

echo sum_array($myArray);