我尝试使用 bccomp 将“+0.00000000000”与“+0.00000000000”进行比较。我希望结果为 0,但实际上得到 1。
$ cat bcmath.php
<?php
var_dump(bccomp("+0.00000000000","-0.00000000000"));
?>
$ php bcmath.php
int(1)
$
您是在比较 +0 和 +0,还是 +0 和 -0。当左操作数大于右操作数时返回“1”。当右操作数大于左操作数时返回“-1”。当它们相等时返回“0”。如果将左侧的正数与右侧的负数进行比较,它将返回“1”。
var_dump(bccomp("+0.00000000000","-0.00000000000"));
从普通算术的角度来看,-0、0和+0都是一样的。在计算中,一些操作可能有不同的行为。
例如,如果您尝试
if (-0 == +0)
你会得到 TRUE
bccomp 似乎是区分正零和负零的情况之一。
老实说,我不知道它为什么会这样,我只知道它确实如此,所以如果你正在编写一个依赖于使用 bccomp 进行比较的程序(并且在将负零与正零进行比较时返回 0),你可能需要事先运行“if”检查。