来自PHP的奇怪行为。 var_dump(390.0)输出38:

时间:2018-05-10 07:47:41

标签: php

测试文件:

<?php
$var        = 0.28682926829268;
$roundedVar = round($var, 2);

var_dump($roundedVar);
var_dump(is_float($roundedVar));
echo "Rounded var: $roundedVar";
?>

输出:

float(0.28:)
bool(true)
Rounded var: 0.28:

注意var_dump和echo输出中0.28之后出现的奇怪冒号字符。

发现之后,我认为PHP必须以某种方式被破坏。所以我卸载并重新安装了PHP。我重新安装了相同版本的PHP,详情如下。我重新运行了测试代码并获得了相同的结果

然后我重新安装了PHP和Apache 2.2。在执行此操作之后,上面的测试用例按预期工作,但随后又出现了另一个错误,我将其缩减为以下测试用例。

测试文件:

<?php
$var = 390;
echo "var: "        ; var_dump($var           );
echo "is_float(): " ; var_dump(is_float($var) );
echo "is_string(): "; var_dump(is_string($var));
echo "echo: $var<br/>\n";

$var = 390.0;
echo "var: "        ; var_dump($var           );
echo "is_float(): " ; var_dump(is_float($var) );
echo "is_string(): "; var_dump(is_string($var));
echo "echo: $var<br/>\n";
?>

输出:

var: int(390) is_float(): bool(false) is_string(): bool(false) echo: 390
var: float(38:) is_float(): bool(true) is_string(): bool(false) echo: 38:

任何人都可以解释这种奇怪的行为吗?

更新

我通过运行硬件诊断发现服务器上的CPU过热。当问题得到解决以便硬件诊断通过时,错误就会停止显示在日志中(请参阅下面接受的答案)。

对于调查类似问题的其他人,我发现在下面的URL中讨论了另一个涉及浮点数和冒号后缀的奇怪PHP错误。不确定是否相关。 https://bugs.php.net/bug.php?id=51396

PHP版本信息:

enter image description here

1 个答案:

答案 0 :(得分:0)

CPU出现故障。

我从这里下载了一个Intel CPU诊断工具:

https://downloadcenter.intel.com/download/19792/Intel-Processor-Diagnostic-Tool

相关产出:

Current Junction Temperature is 99C
Current Degrees Below Max       1C
Maximum Junction Temp Allowed  100C
Test Result - FAIL
Please check your Processor Thermal Solution