2010-07-19 23 views

Respuesta

118

No hay diferencia en PHP. float, double o real son 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 más detalles:
http://www.php.net/manual/en/language.types.float.php

+0

seguro de eso? ¿Hay algún uso de memoria diferente al respecto? – TheCrazyProfessor

+1

Tengo la función 'function alguna (float $ num) {}', cuando uso 'some (17.23)' throws ** error fatal ** some() debe ser una instancia de float, double given, – NaveenDA

+0

@NaveenDA What versión de PHP? Antes de PHP 7.0, las sugerencias de tipo escalar no estaban disponibles y, en su lugar, se interpretarían como nombres de clase. Eso parece lo que está pasando allí. –

17

Para PHP, que son los mismos. http://www.php.net/manual/en/language.types.float.php:

Floating point numbers (also known as "floats", "doubles", or "real numbers") can be specified using any of the following syntaxes: [...]

La parte confusa es la razón por gettype (que no se debe utilizar, de todos modos) devuelve "doble" en lugar de "flotar". La respuesta es http://de2.php.net/manual/en/function.gettype.php:

" double " (for historical reasons "double" is returned in case of a float , and not simply "float")

3

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) 

Nota que esto solo cambia la salida de var_dump(), pero no la gestión de memoria real.

Esto puede resolver algunas inquietudes sobre por qué ve double en lugar de float que se muestra en var_dump en algunas otras máquinas.

Además, con o sin xdebug, gettype todavía devuelve string(6) "double".

+0

¡Muy interesante! Gracias por señalar esto. –

0

En PHP 7.0.14

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

Devuelve "error fatal: TypeError no detectada: Argumento 1 pasó a test() debe ser una instancia de doble, flotador dado".

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

Imprime 2.2111 en la pantalla.

Cuestiones relacionadas