我正在尝试在PHP中进行浮点比较时建立我需要的delta。 我想仔细研究一下我的变量,看看差异。
我有2个计算变量,$ a,$ b。
$a = some_function();
$b = some_other_function();
如何查看PHP使用的确切数字?
我想将它们与此公式进行比较,我需要指定delta:
$delta = 0.00001;
if (abs($a-$b) < $delta) {
echo "identical";
}
var_dump($ a,$ b)返回1.6215; 1.6215。但我知道它们并不完全相同,因为
var_dump($a === $b);
评估为false;
为什么var_dump()
不打印内部值?
答案 0 :(得分:10)
在PHP中,浮点数的打印值取决于PHP配置“precision”。
您可以使用以下内容进行更改:
ini_set('precision', YOUR_DESIRED_PRECISION_AS_INTEGER);
例如with with:
ini_set('precision', 18);
您的号码可能会显示如下内容:
float 1.62149999999999994
浮动1.6214999999999995
所以现在他们之间的区别更清楚了。
所以你的delta可能是:$ delta = 0.00000000000001;这实际上取决于您所寻求的精确度。
如果您需要进行精确的数学计算,请查看BC Math Functions.
参考资料/来源
PHP - Floating point numbers - User Contributed Notes - deminy at deminy dot net
答案 1 :(得分:0)
如果您不想编辑配置文件......可以使用round(val, precision)
和some_function()
中的some_other_function()
。这样,您可以将结果返回到所需的精度。检查:
http://php.net/manual/en/function.round.php