¿Diferencia entre flotar y doble en php?

117

Tengo este codigo

$vad = 1.1;

print gettype($vad);

var_dump($vad);

esto dará como resultado:

double
float(1.1) 

Entonces, ¿es doble o flotante en php?

Centurion
fuente

Respuestas:

151

No hay diferencia en PHP. float, doubleo realson del mismo tipo de datos.

En el nivel C, todo se almacena como double.
El tamaño real sigue dependiendo de la plataforma.

Consulte el manual para obtener más detalles:
http://www.php.net/manual/en/language.types.float.php

Macmade
fuente
¿seguro sobre eso? ¿Hay algún uso de memoria diferente al respecto?
TheCrazyProfessor
2
Tengo una función function some( float $num){}, cuando la uso some(17.23)arroja un error fatal, algunos () deben ser una instancia de flotante, dado doble,
NaveenDA
1
@NaveenDA ¿Qué versión de PHP? Antes de PHP 7.0, las sugerencias de tipo escalar no estaban disponibles y se interpretarían como nombres de clases. Eso parece lo que está pasando allí.
Ken Wayne VanderLinde
simplemente aclarando que no hay tal tipo realde datos en php hasta ahora.
Muhammad Sheraz
@MuhammadSheraz Pero hay una is_realfunción, con es un alias de is_float...; )
Macmade
21

Para PHP, son lo mismo. http://www.php.net/manual/en/language.types.float.php :

Los números de coma flotante (también conocidos como "flotantes", "dobles" o "números reales") se pueden especificar utilizando cualquiera de las siguientes sintaxis: [...]

La parte confusa es por qué gettype (que no debería usar, de todos modos) devuelve "doble" en lugar de "flotar". La respuesta es http://de2.php.net/manual/en/function.gettype.php :

"doble" (por razones históricas, se devuelve "doble" en el caso de un flotante, y no simplemente "flotante")

Victor Nicollet
fuente
10

A partir de PHP 7.0.6 en Windows, comparando este comando sin xdebug:

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

y con xdebug:

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

Tenga en cuenta que esto solo cambia la salida de var_dump (), pero no la administración de memoria real.

Esto puede abordar algunas preocupaciones por las que ve en doublelugar de floatmostrarse en var_dump en algunas otras máquinas.

Además, con o sin xdebug, gettypetodavía regresa string(6) "double".

SOFe
fuente
4

En PHP 7.0.14

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

Devuelve "Error fatal: Error de tipo no detectado: El argumento 1 pasado a test () debe ser una instancia de double, float dado".

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

Imprime 2.2111 en la pantalla.

Oboroten
fuente
8
Solo floates una sugerencia de tipo válida ( ver ). Cuando escribe en su doublelugar, se trata como un nombre de clase y el intérprete lanza la excepción, porque espera una variable con una instancia de la doubleclase
AterLux