PHP - ondalık değerlerini bir dizi Özetle

4 Cevap php

PHP ondalık değerler bir dizi toplamını hesaplamak için çalışıyorum, ama nedense o tamsayılar yuvarlama tutar.

örneğin:

$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 is actually populated with decimal values from an SQL query (the length of $oldarray is about several hundred, but I want the first 10. In the above example, I'm expecting $myVar to be a decimal, but it turns out to be just an integer. I tried setting $myVar = 0.0000 before the for loop, I tried $myVar += $oldArray[$k] + 0.0000, etc but nothing seems to work.

Ben yanlış ne yapıyorum? Nasıl açıkça bir ondalık olarak $ myVar ayarlarım?

4 Cevap

Bu benim için, yeniden imkansız gibi görünüyor verilen bu PHP ortamında kendisi ile ilgili bir sorun var gibi görünüyor.

"Hassas" adında bir ayar için php.ini kontrol edin ve bu 14 önemli rakamlar varsayılan ayarlamak emin olun. Bu değişmiş olurdu neden ben düşünemiyorum, ama kesinlikle bir etkisi olurdu.

Yerine array_sum() kullanmayı deneyin ve değerlerini döküm (şamandıra) kullanabilirsiniz. Ayrıca ben dizideki değerleri doğru biçimde (1,45 ve 1,45 değil) olduğundan emin olur. HTH.

Update

Btw. Eğer dizideki her parametre kontrol etmek için "is_float ()" kullanabilirsiniz.

Bu yeniden olamaz.

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: Ben yorumunuzda kodu denedim, ve bu iyi. AlbertoPL gibi, sorun başka bir yerde olduğunu sanıyorum.

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

Ben bu zaten cevap olduğunu biliyorum, ama MySQL değerleri toplamak için çalışıyoruz, ben sık sık en hızlı alternatif olarak öneririm:

SELECT SUM( `column_name` ) FROM `table_name` LIMIT 10;