$f = 0.58;var_dump(intval($f * 100.0));
Maybe you think he's going to output 58, but he's actually outputting 57.
The reason is that as floating-point data, its accuracy has been lost in part, not fully accurate. So never believe that the floating-point number is accurate to the last one, and never compare two floating-point numbers for equality.
The floating-point number in PHP is a weak type, and for integers or after operations The result is an integer floating-point number, PHP can be treated as an integer, but the type is still the same as floating point. But if it is not an integer after the operation, then PHP treats the result as a strict floating-point number.
In the actual development we can use the following logic to solve this situation
Intval (Round (Floatval ($value) * 100));
PHP floating point (float) arithmetic transit shaping (int) problem