浮点数和双精度数的区别?

我有这个密码

$vad = 1.1;


print gettype($vad);


var_dump($vad);

这将输出:

double
float(1.1)

所以它在 php 中是 double 还是 float?

114163 次浏览

在 PHP 中没有区别。 floatdoublereal是相同的数据类型。

在 C 级,所有内容都存储为 double
实际规模仍然依赖于平台。

更多细节见手册:
Http://www.php.net/manual/en/language.types.float.php

对于 PHP 来说,它们是一样的:

可以使用以下任何语法指定浮点数(也称为“ float”、“ double”或“ real number”) : [ ... ]

令人困惑的是为什么 gettype (不管怎样,你都不应该使用它)返回“ double”而不是“ float”:

“ double”(出于历史原因,对于 float,返回“ double”,而不仅仅是“ float”)

从 Windows 上的 PHP 7.0.6开始,比较这个命令 没有 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"

在 PHP 7.0.14中

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

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

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

在屏幕上显示2.2111。