在PHP中,float和double之间有什么区别?

12 浏览
0 Comments

在PHP中,float和double之间有什么区别?

我有这段代码

$vad = 1.1;
print gettype($vad);
var_dump($vad);

这将输出:

double
float(1.1) 

那么在php中它是double还是float?

0
0 Comments

浮点数在PHP中通常被称为"float"或"double"。尽管它们在实际使用中没有区别,但是在某些情况下可能会导致一些困惑。

首先,PHP官方文档中明确指出浮点数可以使用多种语法来表示,包括"float"和"double"。因此,从语言本身来说,它们是一样的。

然而,问题出现在使用gettype函数时,它返回的是"double"而不是"float"。这看起来有点奇怪,因为根据官方文档的解释,这两个术语是等价的。

其实,这是由于历史原因造成的。在早期版本的PHP中,浮点数的类型被称为"double",而不是"float"。为了保持向后兼容性,即使在现在的版本中,gettype函数仍然返回"double"。

尽管如此,我们在实际开发中应该避免使用gettype函数来判断浮点数的类型。相反,我们应该使用更准确的函数,例如is_float或is_double。

以下是一个示例代码,演示了如何使用is_float函数来判断浮点数的类型:

$number = 3.14;
if (is_float($number)) {
    echo "This number is a float.";
} else {
    echo "This number is not a float.";
}

通过使用is_float函数,我们可以正确地判断浮点数的类型,而不会受到gettype函数的历史遗留问题的影响。

总结起来,尽管在PHP中浮点数可以使用"float"和"double"两个术语来表示,但它们在实际使用中是等价的。然而,由于历史原因,gettype函数返回的是"double"而不是"float"。为了避免这种困惑,我们应该使用更准确的函数来判断浮点数的类型,例如is_float或is_double。这样可以确保我们在开发中得到正确的结果。

0
0 Comments

在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"。

这个问题的出现原因是在不同的环境中,PHP对于浮点数的数据类型显示方式存在差异。在没有使用xdebug的情况下,var_dump函数将浮点数显示为float类型,而在使用xdebug的情况下,var_dump函数将浮点数显示为double类型。

解决这个问题的方法是,可以在代码中明确指定浮点数的数据类型,例如使用强制类型转换:

$number = (float) 28.4;

这样可以确保在不同的环境中,浮点数的数据类型显示方式保持一致。另外,可以使用其他类型检测函数来获取准确的数据类型,而不仅仅依赖于var_dump函数的输出结果。

0
0 Comments

在PHP中,floatdoublereal都是相同的数据类型。在C级别,所有内容都以double形式存储。实际大小仍然取决于平台。要了解更多详细信息,请参阅手册:http://www.php.net/manual/en/language.types.float.php。但是,是否有关于内存使用的差异呢?当我使用function some( float $num){}并调用some(17.23)时,它抛出了fatal error,提示some()必须是float的实例,但给定的是double。这是因为在PHP 7.0之前,标量类型提示不可用并且会被解释为类名。这似乎就是发生的情况。只是澄清一下,到目前为止,PHP中没有real这样的数据类型。但是有一个is_real函数,它是is_float的别名。正确的是,实际上我指的是我们不能使用(real)作为类型提示,因为我们知道(double)(float)已经是实数族的一部分。

0