Rechenfehler?
JohannesMaier
- php
Hi!
Wo liegt hier der Fehler?
$amount = 1990;
$result ['amount'] = $amount/100;
if (intval($amount) == intval(($result ['amount'] * 100))) {
// hier will ich rein
}
else {
echo "fehler";
}
gibt "fehler" aus, warum?
lg
Johannes
Aloha 'oe,
$amount = 1990;
$result ['amount'] = $amount/100;
if (intval($amount) == intval(($result ['amount'] * 100))) {
// hier will ich rein
}
else {
echo "fehler";
}
>
> gibt "fehler" aus, warum?
Prüfe doch mal, was in $result ['amount'] steht.
Gruß, Volker
--
„I conclude that there are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies."
- Tony Hoare
Hi,
$amount = 1990;
$result ['amount'] = $amount/100;
if (intval($amount) == intval(($result ['amount'] * 100))) {
// hier will ich rein
}
else {
echo "fehler";
}
>
> gibt "fehler" aus, warum?
Wegen der (hier schon vielfach diskutierten) Rechenungenauigkeit, die sich beim Rechnen mit Dezimalbrüchen im Binärsystem nun mal zwangsläufig einstellt.
Wenn du bspw. folgende Kontrollausgaben gemacht hättest,
var\_dump($result['amount']);
var\_dump(intval($amount));
var\_dump(intval($result['amount'] \* 100));
dann hättest du als Ergebnis das hier bekommen:
float(19.9)
int(1990)
int(1989)
Wenn du bei letzterem das intval weglässt,
var\_dump($result['amount'] \* 100);
- dann bekommst du wiederum
float(1990)
Das macht sich hier negativ bemerkbar, weil du eine Float-Zahl in einen Integer "konvertierst" - der binärbedingte "Fehler" der Float-Zahl ist so gering, dass sie in dezimaler Form als 1990 ausgegeben wird; beim Umwandeln in Int hingegen schlägt er derart zu.
Wenn du höhere Genauigkeit brauchst, dann schau dir bspw. die [BCMath](http://www.php.net/manual/en/book.bc.php)-Funktionen an.
MfG ChrisB
--
„This is the author's opinion, not necessarily that of Starbucks.“
@@JohannesMaier:
gibt "fehler" aus, warum?
Weil du die FAQ nicht – wie dir geheißen – gelesen hast.
Live long and prosper,
Gunnar
Hallo,
Wo liegt hier der Fehler?
1. Im Verfassen von Doppelpostings
2. Im raschen Wechseln des Nicks.
Ciao,
Martin