PHP Multiplikation spinnt

27o8

abgemeldet
2 Mai 2006
9.028
933
Ich muss zugeben, dass ich gerade bei einre Sache am verzweifeln bin, welche man in der ersten "php Schulstunde" lernen sollte :ugly:

Und zwar die einafche Multiplikation $var*2 z.B.

Problem:
Ich lese Daten per simplexml_load_file() ein und erhalte dann z.B. folgende Ausgabe:

Code:
SimpleXMLElement Object
(
    [item] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [id] => 69
                    [kategorie] => 4
                    [kategorie_name] => S29zdGVubG9zZXM=
                    [euro] => 0.25
                    [prozent] => 0.00
                    [befehl] => a29zdGVubG9zZSBBbm1lbGR1bmc=
                    [beschreibung] => YXV4bW9uZXkuY29tIGlzdCBlaW4gZvxocmVuZGVzIFVudGVybmVobWVuIGltIEJlcmVpY2ggYFAyUC1LcmVkaXRlYCBpbiBEZXV0c2NobGFuZCB1bmQgYnJpbmd0IGF1ZiBkZW0gYXV4bW9uZXkgS3JlZGl0LU1hcmt0cGxhdHogcHJpdmF0ZSBLcmVkaXRuZWhtZXIgdW5kIEtyZWRpdGdlYmVyIHp1c2FtbWVuLg0KDQpQcm9maXRpZXJlbiBhdWNoIFNpZSBub2NoIGhldXRlIGFuIGRpZXNlbSBpbiBEZXV0c2NobGFuZCBlaW56aWdhcnRpZ2VtIEdlc2No5GZ0c21vZGVsbCE=
                    [titel] => YXV4bW9uZXkgLSBHZWxkIGxlaWhlbiB1bmQgdmVybGVpaGVu
                    [time] => 1246478340
                    [seo] => auxmoney-Geld-leihen-und-verleihen
                )

            [1] => SimpleXMLElement Object
                (
                    [id] => 76
                    [kategorie] => 4
                    [kategorie_name] => S29zdGVubG9zZXM=
                    [euro] => 1.50
                    [prozent] => 0.00
                    [befehl] => a29zdGVubG9zZSBVbXp1Z3NhbmZyYWdl
                    [beschreibung] => dW16dWctZWF5LmRlIGJyaW5ndCBLdW5kZW4gdW5kIHJlZ2lvbmFsZSBVbXp1Z3NmaXJtZW4genVzYW1tZW4uDQpEaWUgVm9ydGVpbGUgZvxyIGRlbiBCZXN1Y2hlciBzaW5kDQotIGJlc29uZGVycyBlaW5mYWNoZSBFaW5nYWJlbWFza2UNCi0ga29zdGVubG9zZSB1bmQgdW52ZXJiaW5kbGljaGUgTnV0enVuZw0KLSBzY2huZWxsZXIgS29udGFrdCB6dSBVbnRlcm5laG1lbiBhdXMgZGVyIFJlZ2lvbg0KLSBwZXJz9m5saWNoZSBCZXJhdHVuZyB1bmQgU2VydmljZQ0KDQpCaXR0ZSBudXIgdGVpbG5laG1lbiwgd2VubiBpbiBuYWhlciBadWt1bmZ0IGVpbiBVbXp1ZyBnZXBsYW50IGlzdC4=
                    [titel] => dW16dWctZWFzeS5kZQ==
                    [time] => 1246480229
                    [seo] => umzug-easy-de
                )

        )

)
Nun möchte ich den Euro-Wert ganz einfach mit 4000 multiplizieren. Das ganze funktioniert jedoch nicht, wenn euro > 0 wird nur mit vollen zahlen gerechnet, ansonsten kommt immer 0 raus :wall:

Habe mal aus Interesse folgende Ausgabe eingebaut:

PHP:
echo number_format($bas->item[$i]->euro*4000,0,',','.').' Punkte ('.$bas->item[$i]->euro.')';
Hier nun 2 Ausgaben:
4.000 Punkte (1.50) falsch, richtig wäre 6000
0 Punkte (0.25) falsch, richtig wäre 1000

Laut var_dump ist $bas->item[$i]->euro ein String, ich kriege ihn aber auch nicht mit floatval und ähnlichen Funktionen umgewandelt? :think:
 
PHP:
(float)$bas->item[$i]->euro
(float) und floatval hab ich schon probiert. Es funzt nicht.

PHP:
       var_dump($bas->item[$i]->euro);
       $bas->item[$i]->euro = (float)$bas->item[$i]->euro;
       var_dump($bas->item[$i]->euro);
Ausgabe:
Code:
object(SimpleXMLElement)#9 (1) {
  [0]=>
  string(4) "1.50"
}
object(SimpleXMLElement)#10 (1) {
  [0]=>
  string(3) "1.5"
}

deshalb verzweifel ich ja :think:
 
Auch das
PHP:
var_dump($bas->item[$i]->euro);
$foo = (float)$bas->item[$i]->euro;
var_dump($foo);
? ;)

Was mir noch einfällt:
PHP:
var_dump($bas->item[$i]->euro);
$foo2 =  (float)($bas->item[$i]->euro);
var_dump($foo2);
Der Cast könnte Vorrang vor dem Objekt-Zugriff haben. Is nicht gelistet.
 
bei php wird klassisch ein int() genommen um den TypeCast zu erzwingen.
Bei www.php.net gibt es nur intval.
Einfach mal danach suchen.

Allerdings is dann der Typ in der Datenbank schon ein String.
Sollte wohl in einen Int Wert gewandelt werden.
 
Beim casten zu float bitte bedenken, dass Fließkommazahlen eine Rechenungenauigkeit aufweisen, je nach Anforderung (hier scheint es ja um Geld zu gehen), dann lieber BC Math mit seiner variablen Genauigkeit nutzen.
 
Beim casten zu float bitte bedenken, dass Fließkommazahlen eine Rechenungenauigkeit aufweisen, je nach Anforderung (hier scheint es ja um Geld zu gehen), [...]
float hat 7 Nachkommastellen Genauigkeit. Solang du also keine riesigen Zahlen hast, seh ich da kein Problem, mit Geldbeträgen zu rechnen. Problematisch wirds nur, wenn der Exponent zu groß wird und die Mantisse nicht mehr "so weit runterkommt", um die Nachkommastellen zu erhalten. Das passiert aber mit normalen Geldbeträgen nicht.

edit: der PHP-float-Datentyp is doch eh n 64-bit-double ;)
Von daher: Null Problemo 8)