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?

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


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


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".


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.