Unterschied zwischen float und double in php?


117

Ich habe diesen Code

$vad = 1.1;

print gettype($vad);

var_dump($vad);

Dies wird Folgendes ausgeben:

double
float(1.1) 

Also ist es doppelt oder schwebend in PHP?

Antworten:


151

Es gibt keinen Unterschied in PHP. float, doubleOder realsind der gleiche Datentyp.

Auf der C-Ebene wird alles als gespeichert double.
Die tatsächliche Größe ist weiterhin plattformabhängig.

Weitere Informationen finden Sie im Handbuch:
http://www.php.net/manual/en/language.types.float.php


dessen sicher? Gibt es eine andere Speichernutzung?
— TheCrazyProfessor

2
Ich habe Funktion function some( float $num){}, wenn ich es benutze some(17.23), wirft es einen schwerwiegenden Fehler. Some () muss eine Instanz von float sein, doppelt angegeben,
— NaveenDA

1
@NaveenDA Welche Version von PHP? Vor PHP 7.0 waren keine Hinweise auf Skalartypen verfügbar und wurden stattdessen als Klassennamen interpretiert. Das sieht so aus, als ob dort etwas los ist.
— Ken Wayne VanderLinde

Nur um zu verdeutlichen, dass es realin PHP bisher keinen solchen Datentyp gibt .
— Muhammad Sheraz

@ MuhammadSheraz Aber es gibt eine is_realFunktion, mit der ein Alias ​​von is_float...; )
— Macmade

21

Für PHP sind sie gleich. http://www.php.net/manual/en/language.types.float.php :

Gleitkommazahlen (auch als "Floats", "Doubles" oder "Real Numbers" bezeichnet) können mit einer der folgenden Syntaxen angegeben werden: [...]

Der verwirrende Teil ist, warum gettype (das Sie sowieso nicht verwenden sollten) "double" anstelle von "float" zurückgibt. Die Antwort lautet http://de2.php.net/manual/en/function.gettype.php :

"double" (aus historischen Gründen wird "double" im Falle eines Floats zurückgegeben und nicht einfach "float")


10

Ab PHP 7.0.6 unter Windows wird dieser Befehl ohne xdebug verglichen:

$ php -r 'var_dump(28.4);'
float(28.4)

und mit xdebug:

$ php -r 'var_dump(28.4);'
Command line code:1:
double(28.4)

Beachten Sie, dass dies nur die Ausgabe von var_dump () ändert, nicht jedoch die eigentliche Speicherverwaltung.

Dies kann einige Probleme beheben, die auf einigen anderen Computern angezeigt werden, doubleanstatt floatin var_dump angezeigt zu werden.

Auch mit oder ohne xdebug wird gettypeweiterhin zurückgegeben string(6) "double".


4

In PHP 7.0.14

function test(double $a) {
    var_dump($a);
}
test(2.2111);

Rückgabe "Schwerwiegender Fehler: Nicht erfasster TypeError: Argument 1, das an test () übergeben wurde, muss eine Instanz von double sein, float angegeben".

function test(float $a) {
    var_dump($a);
}
test(2.2111);

Druckt 2.2111 auf dem Bildschirm.


8
Nur floatist ein gültiger Typhinweis ( siehe ). Wenn Sie doublestattdessen double
— eingeben
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.