Différence entre float et double en php?

118

J'ai ce code

$vad = 1.1;

print gettype($vad);

var_dump($vad);

cela produira:

double
float(1.1) 

Donc c'est double ou float en php?

Centurion
la source

Réponses:

153

Il n'y a aucune différence en PHP. float, doubleou realsont du même type de données.

Au niveau C, tout est stocké sous forme de fichier double.
La taille réelle dépend toujours de la plate-forme.

Consultez le manuel pour plus de détails:
http://www.php.net/manual/en/language.types.float.php

Macmade
la source
sûr de ça? y a-t-il une utilisation de la mémoire différente à ce sujet?
TheCrazyProfessor
2
J'ai une fonction function some( float $num){}, quand je l'utilise, some(17.23)il lance une erreur fatale, certains () doivent être une instance de float, double donné,
NaveenDA
1
@NaveenDA Quelle version de PHP? Avant PHP 7.0, les indications de type scalaire n'étaient pas disponibles et étaient plutôt interprétées comme des noms de classe. Cela ressemble à ce qui se passe là-bas.
Ken Wayne VanderLinde
juste clarifier qu'il n'y a pas de tel type realde données dans php jusqu'à présent.
Muhammad Sheraz
@MuhammadSheraz Mais il y a une is_realfonction, avec est un alias de is_float...; )
Macmade
21

Pour PHP, ce sont les mêmes. http://www.php.net/manual/en/language.types.float.php :

Les nombres à virgule flottante (également appelés «flottants», «doubles» ou «nombres réels») peuvent être spécifiés à l'aide de l'une des syntaxes suivantes: [...]

La partie déroutante est pourquoi gettype (que vous ne devriez pas utiliser, de toute façon) renvoie "double" au lieu de "float". La réponse est http://de2.php.net/manual/en/function.gettype.php :

"double" (pour des raisons historiques, "double" est renvoyé dans le cas d'un float, et pas simplement "float")

Victor Nicollet
la source
10

Depuis PHP 7.0.6 sous Windows, comparez cette commande sans xdebug:

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

et avec xdebug:

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

Notez que cela ne modifie que la sortie de var_dump (), mais pas la gestion de la mémoire réelle.

Cela peut résoudre certains problèmes pour lesquels vous voyez doubleau lieu de floats'afficher dans var_dump sur d'autres machines.

De plus, avec ou sans xdebug, gettyperenvoie toujours string(6) "double".

SOFe
la source
4

En PHP 7.0.14

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

Renvoie "Fatal error: Uncaught TypeError: l'argument 1 passé à test () doit être une instance de double, float donné".

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

Imprime 2.2111 à l'écran.

Oboroten
la source
8
Seul floatest un indice de type valide ( voir ). Lorsque vous tapez à la doubleplace, il est traité comme un nom de classe et l'interpréteur lève l'exception, car il attend une variable avec une instance de la doubleclasse
AterLux