Я пытаюсь сравнить «+0.00000000000» с «+0.00000000000», используя bccomp. Я ожидаю, что результат будет 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)
Вы получите ИСТИНА
bccomp, похоже, является одним из случаев, когда различают положительный ноль и отрицательный ноль.
Честно говоря, я не знаю, почему именно так он себя ведет, я просто знаю, что так и есть, поэтому, если вы пишете программу, основанную на сравнении с использованием bccomp (и возвращающую 0 при сравнении отрицательного нуля с положительным), вы Возможно, вы захотите запустить проверку «если» заранее.