2009-06-22 8 views
1

Я пытаюсь вычислить сумму массива десятичных значений в PHP, но по какой-то причине он продолжает округлять до целых чисел.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 как десятичную?

+1

ли параметр точности вашего переменные где-то, что может быть повлиявшим это? – AlbertoPL

+0

PHP-массивы основаны на 0. для ($ к = 0 ...). Кроме того, вы должны инициализировать $ myVar на 0,00 выше цикла for. – gahooa

+0

Я не хочу нулевого термина. Я инициализировал его, от 0.0 до 0.0000. И я не знаю, есть ли место, чтобы установить точность переменных. – 2009-06-22 19:42:09

ответ

11

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

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

+0

да, я попробовал ini_set (" точность ", 14); и теперь он отлично работает. благодаря! – 2009-06-22 19:48:41

+0

+1 Impressive :) – merkuro

+0

+1 большое предложение – Eineki

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 

EDIT: Я пробовал код в вашем комментарии, и все в порядке. Как и 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

$ 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); $ myVar = 0,0000; for ($ k = 1; $ k <10; $ k ++) $ myVar + = $ oldArray [$ k]; print_r ($ myVar); Я получаю целое число -.- – 2009-06-22 19:37:56

+0

Также работал в консоли PHP, получил 8566.18 =/ – Matchu

4

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

Update

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

+0

Я не могу использовать array_sum(), потому что мне нужна сумма только для части массива. И я все равно попробовал, и он все еще дал целое число. – 2009-06-22 19:43:43

+0

+1 для подсказки на числовом формате – Eineki

+3

вы можете использовать arry_sum (array_slice ($ oldArray, 1,10)), чтобы иметь сумму первого 10 элемента oldArray (исключая 0-й элемент) – Eineki

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); 
Смежные вопросы