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 - 浮点数 - 用户贡献的笔记 - deminy在deminy dot net