2009-06-22 9 views
1

Ich versuche, die Summe eines Arrays von Dezimalwerten in PHP zu berechnen, aber aus irgendeinem Grund rundet es auf Ganzzahlen.PHP - Summieren eines Arrays von Dezimalwerten

zum Beispiel:

$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 ist eigentlich mit Dezimalzahlen aus einer SQL-Abfrage gefüllt (die Länge von oldarray $ ist über mehrere hundert, aber ich möchte den ersten 10. In dem obigen Beispiel, Ich erwarte, dass $ myVar eine Dezimalzahl ist, aber es stellt sich heraus, dass es nur eine Ganzzahl ist.Ich habe versucht, $ myVar = 0.0000 vor der for-Schleife zu setzen, ich habe $ myVar + = $ oldArray [$ k] + 0.0000 usw. versucht nichts scheint zu funktionieren.

Was mache ich falsch? Wie setze ich $ myVar explizit auf eine Dezimalzahl?

+1

Sie sind die Präzision Ihrer Variablen irgendwo einstellen, dass diese Auswirkungen werden könnte? – AlbertoPL

+0

PHP-Arrays sind 0 basiert. für ($ k = 0 ...). Außerdem sollten Sie $ myVar auf 0.00 über der for-Schleife initialisieren. – gahooa

+0

Ich möchte nicht den nullten Begriff. Ich habe es von 0,0 bis 0,0000 initialisiert. Und ich weiß nicht, ob es einen Platz gibt, um die Genauigkeit der Variablen festzulegen. –

Antwort

11

Da dies unmöglich zu reproduzieren scheint, klingt es für mich wie ein Problem mit Ihrer PHP-Umgebung selbst.

Überprüfen Sie die php.ini auf eine Einstellung namens "precision" und stellen Sie sicher, dass sie auf den Standardwert von 14 signifikanten Werten eingestellt ist. Ich kann mir nicht vorstellen, warum dies geändert werden würde, aber es würde definitiv Auswirkungen haben.

+0

yeah, ich habe versucht ini_set (" Präzision ", 14); und jetzt funktioniert es großartig. Vielen Dank! –

+0

+1 Beeindruckend :) – merkuro

+0

+1 großer Vorschlag – Eineki

3

Kann dies nicht reproduzieren.

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: Ich habe den Code in Ihrem Kommentar versucht, und es ist in Ordnung. Wie AlbertoPL vermute ich, dass das Problem anderswo ist.

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; für ($ k = 1; $ k <10; $ k ++) $ myVar + = $ oldArray [$ k]; print_r ($ myVar); Ich bekomme eine ganze Zahl -.- –

+0

Auch in PHP-Konsole lief, habe 8566.18 =/ – Matchu

4

können Sie versuchen, array_sum() statt und verwenden (float) mit den Werten zu werfen. Zusätzlich würde ich sicherstellen, dass die Werte im Array im richtigen Format sind (1.45 und nicht 1.45). HTH.

aktualisieren

Btw. Sie können "is_float()" verwenden, um jeden Parameter im Array zu überprüfen.

+0

Ich kann Array_sum() nicht verwenden, weil ich nur die Summe für einen Teil des Arrays wollen. Und ich habe es trotzdem versucht und es gab immer noch die ganze Nummer. –

+0

+1 für den Hinweis auf das Zahlenformat – Eineki

+3

Sie können arry_sum (array_slice ($ oldArray, 1,10)) verwenden, um die Summe der ersten 10 Elemente von oldArray zu haben (ohne das 0. Element) – Eineki

0

Ihre eigene Implementierung Fabrikat:

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