为什么is_infinite()对于字符串“ 592e5399”返回TRUE?

Raa*_*Raa 1 php

<?php

$number1 = 1;
$number2 = 0;

$number3 = $number1/$number2 ;
Run Code Online (Sandbox Code Playgroud)

$ number3将返回float(INF),这是可以的。

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

为了识别INF,我可以使用is_infinite,如下所示。

$check_Is_INF = is_infinite($number3);
Run Code Online (Sandbox Code Playgroud)

上面的$ check_Is_INF将返回true-可以。

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

但是,如果我检查以下字符串,为什么总是返回TRUE592e5399,如下所示

$number3 = '592e5399';
$check_Is_INF = is_infinite($number3);
var_dump($check_Is_INF );
Run Code Online (Sandbox Code Playgroud)

use*_*558 6

就像is_infinite的文档中一样

如果val是无限的(正数或负数),例如log(0)的结果或任何太大而无法放入该平台上的float的值,则返回TRUE 。

该数字592e5399在符号表达式中(因为e它包含在内),因此它是一个非常大的数字,超出了浮点数限制。因此,它将被视为无穷大

精确地,该e方法^的数目将为592 ^ 5399


关于变量类型的注释$number3

您将其设置为String,但是由于PHP的Type Juggling,您在表达式中使用的每个值都将根据上下文的上下文来假定类型。在这种情况下,因为函数is_infinite需要一个数字,所以将字符串转换为数字。

  • 这是正确的答案。在64位平台上,`PHP_FLOAT_MAX`是`1.7976931348623E + 308`,因为OP的数量要大得多。这里的重要部分是e的数学常数,即2.71828。在[这里](https://www.nde-ed.org/EducationResources/Math/Math-e.htm)了解更多有关`e`的信息。例如:“ 592e53”(请注意,我从操作数中省略了其他2个整数)是“ 59,100,000,000,000,000,000,576,016,664,592,256,840,144,512,808,336,808,352”。因此,您可以想象op的数量有多大。 (3认同)