1

PHP で 10 進数値の配列の合計を計算しようとしていますが、何らかの理由で整数に丸められ続けます。

例えば:

$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 クエリからの 10 進数値が取り込まれます ($oldarray の長さは約数百ですが、最初の 10 が必要です。上記の例では、$myVar が 10 進数であると予想していますが、実際にはfor ループの前に $myVar = 0.0000 を設定しようとしたり、$myVar += $oldArray[$k] + 0.0000 などを試したりしましたが、何も動作しないようです。

私は何を間違っていますか?$myVar を明示的に 10 進数に設定するにはどうすればよいですか?

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 に答える