2

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

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

$ php bcmath.php
int(1)
$
4

2 回答 2

1

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

var_dump(bccomp("+0.00000000000","-0.00000000000"));
于 2016-04-21T03:21:26.173 回答
1

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

例如,如果您尝试

if (-0 == +0) 

你会得到 TRUE

bccomp 似乎是区分正零和负零的情况之一。

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

于 2016-04-21T03:38:06.747 回答