PHP中float和double的区别是什么?

137

我有这段代码

$vad = 1.1;

print gettype($vad);

var_dump($vad);
这将输出:
double
float(1.1) 

那么在PHP中是double还是float?

4个回答

186

在PHP中,floatdoublereal这三个数据类型没有区别。

在C语言层面上,所有的数据都以double的形式存储。但实际大小仍然取决于平台。

请参阅手册以获取更多详细信息:
http://www.php.net/manual/zh/language.types.float.php


你确定吗?它们在内存使用方面有什么不同吗? - TheCrazyProfessor
3
我有一个函数 function some( float $num){},当我使用 some(17.23) 时,它会抛出 致命错误 some() 必须是实例化的浮点数,但传入了双精度型。 - Naveen DA
2
@NaveenDA 你使用的是哪个版本的PHP?在PHP 7.0之前,标量类型提示是不可用的,会被解释为类名。看起来就像是这种情况。 - Ken Wayne VanderLinde
只是澄清一下,目前在PHP中并没有名为real的数据类型。 - Muhammad Sheraz
@MuhammadSheraz 但是有一个is_real函数,它是is_float的别名... ; ) - Macmade
@Macmade 没错,实际上我的意思是我们不能使用 (real) 作为类型提示,因为我们知道 (double)(float) 已经是实数家族的一部分了。 - Muhammad Sheraz

24
对于PHP来说,它们是相同的。浮点数(也称为"floats"、"doubles"或"real numbers")可以使用以下任何语法来指定:[...]。
令人困惑的是为什么gettype(无论如何都不应该使用)返回"double"而不是"float"。答案在于:[...]。
"double"(由于历史原因,在浮点数的情况下返回"double",而不是简单地返回"float")。

11

截至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()的输出,但不会实际改变内存管理。

这可能解释了为什么在其他机器上,var_dump中看到的是double而不是float的一些疑问。

此外,无论是否使用xdebug,gettype仍然返回string(6) "double"


7

在PHP 7.0.14版本中

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

返回“致命错误:未捕获的类型错误:test()的第1个参数必须是double的实例,但传递了float”。

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

将 2.2111 打印到屏幕上。


1
更新的链接 https://php.net/language.types.declarations - Zombo
正如 PHP 手册中的 "类型声明" 链接所说,"不支持以上标量类型的别名。" 因此最好选择 float,它是官方类型名称,而且被语言支持得最好。 - Andrew Koster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接