PHP - 获取浮点变量内部值

Val*_*spa 2 php floating-point-precision

我正在尝试在PHP中进行浮点比较时建立我需要的delta.我想仔细看看我的变量,看看差异.

我有2个计算变量,$ a,$ b.

$a = some_function();

$b = some_other_function();
Run Code Online (Sandbox Code Playgroud)

如何查看PHP使用的确切数字?

我想将它们与这个公式进行比较,我需要指定delta:

$delta = 0.00001;
if (abs($a-$b) < $delta) {
  echo "identical";
}
Run Code Online (Sandbox Code Playgroud)

var_dump($ a,$ b)返回1.6215; 1.6215.但我知道他们并不完全相同,因为

var_dump($a === $b);
Run Code Online (Sandbox Code Playgroud)

评估为假;

为什么不var_dump()打印内部值?

Val*_*spa 10

在PHP中,浮点数的打印值取决于PHP配置"precision".

你可以改变它:

ini_set('precision', YOUR_DESIRED_PRECISION_AS_INTEGER);
Run Code Online (Sandbox Code Playgroud)

例如with with:

ini_set('precision', 18);
Run Code Online (Sandbox Code Playgroud)

您的号码可能会显示如下内容:

漂浮1.62149999999999994

漂浮1.6214999999999995

所以现在他们之间的区别更清楚了.

所以你的delta可能是:$ delta = 0.00000000000001; 这取决于您所寻求的精度.

如果您需要进行精确的数学计算,请查看BC数学函数.


参考/来源

PHP - 浮点数

PHP - 浮点数 - 用户贡献的笔记 - deminy在deminy dot net

键盘