Diferença entre float e double no php?


117

Eu tenho esse código

$vad = 1.1;

print gettype($vad);

var_dump($vad);

isso resultará em:

double
float(1.1) 

Então é double ou float no php?

Respostas:


151

Não há diferença no PHP. float, doubleou realsão do mesmo tipo de dados.

No nível C, tudo é armazenado como um double.
O tamanho real ainda depende da plataforma.

Veja o manual para mais detalhes:
http://www.php.net/manual/en/language.types.float.php


certeza sobre isso? há algum uso de memória diferente sobre isso?
TheCrazyProfessor

2
Eu tenho uma função function some( float $num){}, quando eu uso some(17.23)ela gera um erro fatal, some () deve ser uma instância de float, double given,
NaveenDA

1
@NaveenDA Qual versão do PHP? Antes do PHP 7.0, dicas de tipo escalar não estavam disponíveis e eram interpretadas como nomes de classe. Isso se parece com o que está acontecendo lá.
Ken Wayne VanderLinde

apenas esclarecendo que não existe tal tipo de dados realno php até agora.
Muhammad Sheraz

@MuhammadSheraz Mas há uma is_realfunção, com é um alias de is_float...; )
Macmade

21

Para PHP, eles são iguais. http://www.php.net/manual/en/language.types.float.php :

Números de ponto flutuante (também conhecidos como "flutuantes", "duplos" ou "números reais") podem ser especificados usando qualquer uma das seguintes sintaxes: [...]

A parte confusa é porque gettype (que você não deveria usar, de qualquer maneira) retorna "double" ao invés de "float". A resposta é http://de2.php.net/manual/en/function.gettype.php :

"double" (por razões históricas, "double" é retornado no caso de um float, e não simplesmente "float")


10

A partir do PHP 7.0.6 no Windows, comparando este comando sem xdebug:

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

e com xdebug:

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

Observe que isso apenas altera a saída de var_dump (), mas não o gerenciamento de memória real.

Isso pode resolver algumas questões por que você vê em doublevez de floatmostrado no var_dump em algumas outras máquinas.

Além disso, com ou sem xdebug, gettypeainda retorna string(6) "double".


4

No PHP 7.0.14

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

Retorna "Erro fatal: TypeError não capturado: Argumento 1 passado para test () deve ser uma instância de double, float fornecido".

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

Imprime 2.2111 na tela.


8
floatÉ apenas uma dica de tipo válida ( consulte ). Quando você digita double, ele é tratado como um nome de classe e o interpretador lança a exceção, porque espera uma variável com instância da doubleclasse
AterLux
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.