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


117

我有这个代码

$vad = 1.1;

print gettype($vad);

var_dump($vad);

这将输出:

double
float(1.1) 

所以它是double还是float in php?

Answers:


151

PHP没有区别。floatdouble或者real是相同的数据类型。

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

有关更多详细信息,请参见手册:http :
//www.php.net/manual/zh/language.types.float.php


确定吗?有一些不同的内存使用方式吗?
TheCrazyProfessor

2
我有函数function some( float $num){},当我使用some(17.23)它引发致命错误时, some()必须是float的实例,并且是double给定的
NaveenDA

1
@NaveenDA什么版本的PHP?在PHP 7.0之前,标量类型提示不可用,而是被解释为类名。看起来那里发生了什么。
肯·韦恩·范德林德

只是澄清real到目前为止在php中还没有这样的数据类型。
穆罕默德·谢拉兹

@MuhammadSheraz但是有一个is_real函数,带有is_float... 的别名。)
Macmade

21

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

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

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

“ double”(出于历史原因,如果是float,则返回“ double”,而不是简单的“ float”)


10

由于PHP 7.0.6的Windows上,比较该命令没有 Xdebug的:

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

Xdebug的:

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

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

这可能解决了一些问题,为什么您在其他一些机器上看到double而不是float显示在var_dump中。

同样,无论是否带有xdebug,gettype仍然会返回string(6) "double"


4

在PHP 7.0.14中

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

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

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

在屏幕上显示2.2111。


8
只有float一个有效的类型提示(请参阅)。当您键入时double,它将被视为类名,并且解释器会引发异常,因为它期望带有double类实例的变量
AterLux
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.