/ / PHP ignoriert Ziffern rechts vom Dezimalpunkt in der Gleichung - PHP, Gleitkomma

PHP Ignorieren von Ziffern rechts vom Dezimalpunkt in Gleichung - php, Fließkomma

Ich habe eine Variable $x deren Wert aus einer XML-Datei eingelesen wird. Der Wert, der aus dem XML gelesen wird, ist 1,963788, nicht mehr und nicht weniger. Wenn ich ausgebe $xIch sehe, dass der Wert in $x ist in der Tat 1,963788. Mit der Welt ist alles in Ordnung.

Aber dann, wenn ich x in einer Gleichung wie

$pl = $x*125.0-200.0;

Der Wert von $pl endet mit -75. Aus irgendeinem Grund scheint PHP die Ziffern rechts vom Komma in zu ignorieren oder sie einfach loszuwerden $x, was macht $x enthalten 1. Ich dachte, dass es die Chance eines Schneeballs in der Hölle gibt, dass dies auch in anderen Sprachen passiert ist, also habe ich es in C ++ geschrieben und, große Überraschung, bekomme ich die richtige Antwort von 45.4735.

Jemand hat das schon einmal erlebt oder weiß, was los ist? Danke.

Antworten:

1 für die Antwort № 1

Hast du es versucht? floatval? Vielleicht interpretiert PHP Ihre Zahl als String und die Standardkonvertierung wandelt sie einfach in eine Ganzzahl um.


1 für die Antwort № 2

Es liegt wahrscheinlich daran, dass $x wird als Zeichenfolge interpretiert und in eine Ganzzahl und nicht in einen Gleitkommawert konvertiert.

Versuchen:

$pl = (float) $x * 125.0 - 200.0;

1 für die Antwort № 3

Ihre Nummer scheint beim Casting als Float gescheitert zu sein. Wenn ich "1,963788" verwende, erhalte ich Ihr Ergebnis. Wenn ich "2,963788" benutze, erhalte ich ein Ergebnis von 50. Laut den PHP-Dokumenten für intval (und so scheint es, versucht PHP, dies als Ganzzahl umzuwandeln): Strings will most likely return 0 although this depends on the leftmost characters of the string. The common rules of integer casting apply.

Überprüfen Sie den Wert, den $ x tatsächlich hat, sorgfältig. Es kann sein, dass es nicht das ist, was Sie erwarten, da PHP anscheinend nicht der Meinung ist, dass es sich tatsächlich um ein Float handelt oder es als solches getippt worden wäre.


0 für die Antwort № 4

Kurz bevor Sie rechnen $plmach a var_dump auf $x um zu sehen, was der tatsächliche Wert darin gespeichert ist. Ich habe Ihren Code ausprobiert und er gibt den korrekten Wert 45.4735 zurück, sodass ich möglicherweise nicht an PHP schuld bin.