浮点数由于精度问题,不能直接进行比较。
$a = 100.411;
$b = 100;
$c = 0.411;
$d = $a - $b;
var_dump($c == $d); // false
PHP提供了BC函数,BC Math
For arbitrary precision mathematics PHP offers the Binary Calculator which supports numbers of any size and precision, represented as strings.
其中bccomp用来比较两个任意精度的数值:
$a = 100.411;
$b = 100;
$c = 0.411;
$d = $a - $b;
var_dump(bccomp($c, $d, 3)); // 0 表示相等
Description
int bccomp ( string $left_operand = "" , string $right_operand = "" [, int $scale = int ] )
Compares the left_operand to the right_operand and returns the result as an integer.
Parameters
left_operand
The left operand, as a string.
right_operand
The right operand, as a string.
scale
The optional scale parameter is used to set the number of digits after the decimal place which will be used in the comparison. Default value 0.
Return Values
- 0 if the two operands are equal,
- 1 if the left_operand is larger than the right_operand,
- -1 otherwise.