1

我正在尝试计算 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

4 回答 4

12

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

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

于 2009-06-22T19:45:44.520 回答
4

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

更新

顺便提一句。您可以使用“is_float()”检查数组中的每个参数。

于 2009-06-22T19:14:21.370 回答
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
于 2009-06-22T19:11:57.070 回答
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);
于 2016-04-20T12:50:19.427 回答