为什么在PHP中使用bccomp时,负零不等于正零?

为什么在PHP中使用bccomp时,负零不等于正零?,php,bcmath,Php,Bcmath,我尝试使用bccomp将“+0.00000000000”与“+0.00000000000”进行比较。我希望结果是0,但实际上得到1 $ cat bcmath.php <?php var_dump(bccomp("+0.00000000000","-0.00000000000")); ?> $ php bcmath.php int(1) $ $cat bcmath.php $php bcmath.php int(1) $ 您是将+0与+0进行比较,还是将+0与-0进行比较。当左操作

我尝试使用bccomp将“+0.00000000000”与“+0.00000000000”进行比较。我希望结果是0,但实际上得到1

$ cat bcmath.php
<?php
var_dump(bccomp("+0.00000000000","-0.00000000000"));
?>

$ php bcmath.php
int(1)
$
$cat bcmath.php
$php bcmath.php
int(1)
$

您是将+0与+0进行比较,还是将+0与-0进行比较。当左操作数大于右操作数时,返回“1”。当右操作数大于左操作数时,返回'-1'。当它们相等时返回“0”。如果将左侧的正值与右侧的负值进行比较,则返回“1”

var_dump(bccomp("+0.00000000000","-0.00000000000"));

从普通算术的角度来看,-0、0和+0都是相同的。在计算tho中,某些操作可能具有不同的行为

例如,如果您尝试

if (-0 == +0) 
你会实现的

bccomp似乎是区分正零和负零的案例之一


老实说,我不知道它为什么会这样,我只知道它会这样,所以如果您正在编写一个依赖于使用bccomp进行比较的程序(并且在将负零与正零进行比较时返回0),您可能需要事先运行一个“如果”检查。

我刚刚发现bccomp(“+0”,“-0”)得到一个0,但bccomp(“+0.0”,“-0.0”)得到1。非常奇怪。是的。一直以来,如果你将它们与“if(+0.0==-0.0)”或“if(+0.00==-0.0000)”进行比较,你仍然会从itI中得到一个真实的答案。我相信这在PHP7.1.10中是固定的,它修复了许多
bcmath
错误,包括以下一个: