PHP - 获取浮点变量内部值

时间:2012-12-10 11:54:10

标签: php floating-point-precision

我正在尝试在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()不打印内部值?

2 个答案:

答案 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

PHP - Floating point numbers - User Contributed Notes - deminy at deminy dot net

Codepad

答案 1 :(得分:0)

如果您不想编辑配置文件......可以使用round(val, precision)some_function()中的some_other_function()。这样,您可以将结果返回到所需的精度。检查:
http://php.net/manual/en/function.round.php