0
$test1 = (0 == "0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001");
$test2 = (0 == "0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001");

var_dump($test1); //Returns False
var_dump($test2); //Returns True

We are using PHP7 and we noticed this. We got to this point because we previously tried the following:

$test3 = (0 == "0"); //Returns true
$test4 = (0 == "1"); //Returns false
$test5 = (0 == null); //Returns true

So we started playing around with the variables.

The first question is: why does $test1 return false while $test2 returns true? Does this have to do with the floating point precision? Or is it some other tweak in the php.ini that controlls the length of the string?

PD: While this doesn't affect our real use case scenario, we are thinking on forcing ourselves to always use === instead of == to avoid this behaviour.

Alpha2k
  • 2,212
  • 7
  • 38
  • 65

0 Answers0