php中的float和double之间的区别?

Cen*_*ion 112 php

我有这个代码

$vad = 1.1;

print gettype($vad);

var_dump($vad);
Run Code Online (Sandbox Code Playgroud)

这将输出:

double
float(1.1) 
Run Code Online (Sandbox Code Playgroud)

所以它是双重或浮动在PHP?

Mac*_*ade 145

PHP没有区别.float,double或者real是相同的数据类型.

在C级别,所有内容都存储为double.
实际大小仍然取决于平台.

有关详细信息,请参阅手册:http:
//www.php.net/manual/en/language.types.float.php

  • 我有函数function some(float $ num){}`,当我使用`some(17.23)`时,它会抛出致命错误** some()必须是float的实例,两次给出, (2认同)
  • @NaveenDA 什么版本的 PHP?在 PHP 7.0 之前,标量类型提示不可用,而是被解释为类名。看起来就像那里正在发生的事情。 (2认同)

Vic*_*let 19

对于PHP,它们是相同的.http://www.php.net/manual/en/language.types.float.php:

浮点数(也称为"浮点数","双数"或"实数")可以使用以下任何语法指定:[...]

令人困惑的部分是为什么gettype(你不应该使用,无论如何)返回"double"而不是"float".答案是http://de2.php.net/manual/en/function.gettype.php:

"double"(由于历史原因,"double"在浮动的情况下返回,而不仅仅是"浮动")


SOF*_*OFe 8

从Windows上的PHP 7.0.6开始,在没有 xdebug的情况下比较此命令:

$ php -r 'var_dump(28.4);'
float(28.4)
Run Code Online (Sandbox Code Playgroud)

Xdebug的:

$ php -r 'var_dump(28.4);'
Command line code:1:
double(28.4)
Run Code Online (Sandbox Code Playgroud)

请注意,这只会更改var_dump()输出,而不会更改实际的内存管理.

这可能会解决一些问题,为什么你会看到double而不是float在其他一些机器中的var_dump中显示.

此外,无论有没有xdebug,gettype仍然会返回string(6) "double".


Obo*_*ten 5

在 PHP 7.0.14 中

function test(double $a) {
    var_dump($a);
}
test(2.2111);
Run Code Online (Sandbox Code Playgroud)

返回“致命错误:未捕获的类型错误:传递给 test() 的参数 1 必须是 double 的实例,给定的浮点数”。

function test(float $a) {
    var_dump($a);
}
test(2.2111);
Run Code Online (Sandbox Code Playgroud)

在屏幕上打印 2.2111。