Ich bin eben per Zufall über etwas gestolpert, das ich mir nicht erklären kann. Ich möchte die Nettopreise passend zur Steuer (19%, 7%) in einem Array sammeln. Nur leider ist plötzlich 19 = 18, wie kann das sein?
$products_tax stammt aus der Datenbank und wird von einer Funktion übergeben. Wert 19, Typ Float
$result['products_price'] = Wert 100, Typ Float
$tqty = Wert 1, Typ String
PHP-Code:
var_dump($products_tax);
$this->amounts[$products_tax] += $result['products_price'] * $qty;
var_dump($products_tax);
var_dump($this->amounts);
Das ergibt folgende Ausgabe:
Code:
float 19
float 19
array
18 => float 100
Ändere ich den oberen Code folgendermaßen ab:
PHP-Code:
var_dump((int)$products_tax);
$this->amounts[(string)$products_tax] += $gv_result['products_price'] * (int)$qty;
var_dump($products_tax); var_dump($this->amounts);
dann stimmt das Ergebnis (und der explizite Cast nach int zeigt, was passiert):
Code:
int 18
float 19
array
19 => float 100
Das Float nicht 100%
präzise ist, wusste ich. Aber warum wird es nach außen als 19 dargestellt, intern wohl aber als 18,999999... behandelt und somit auf 18 gecastet? Finde nur ich das inkonsequent oder hab ich da was falsch verstanden? Vermutlich sollte man keine Floatzahlen als Array-Index verwenden...