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.