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?

Zenturio
quelle

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

Macmade
quelle
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")

Victor Nicollet
quelle
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".

SOFe
quelle
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.

Oboroten
quelle
8
Nur floatist ein gültiger Typhinweis ( siehe ). Wenn Sie doublestattdessen double
eingeben