PHP - суммирование массива десятичных значений - PullRequest
1 голос
/ 22 июня 2009

Я пытаюсь вычислить сумму массива десятичных значений в 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 будет десятичным, но это будет целое число. Я пытался установить $ myVar = 0,0000 перед циклом for, я пытался установить $ myVar + = $ oldArray [$ k] + 0,0000 и т. Д., Но ничего не работает.

Что я делаю не так? Как явно установить $ myVar в десятичное число?

Ответы [ 4 ]

12 голосов
/ 22 июня 2009

Учитывая, что это невозможно воспроизвести, для меня это звучит как проблема самой PHP-среды.

Проверьте php.ini для параметра, называемого «точность», и убедитесь, что он установлен по умолчанию из 14 значащих цифр. Я не могу себе представить, почему это изменится, но это определенно окажет влияние.

4 голосов
/ 22 июня 2009

Вы можете попробовать использовать array_sum () и использовать (float) для приведения значений. Кроме того, я хотел бы убедиться, что значения в массиве в правильном формате (1,45, а не 1,45). НТН.

Обновление

Btw. вы можете использовать is_float () для проверки каждого параметра в массиве.

3 голосов
/ 22 июня 2009

Не могу воспроизвести это.

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
0 голосов
/ 20 апреля 2016

Создайте собственную реализацию:

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);
...