liviococco Posted October 9, 2009 Share Posted October 9, 2009 Debugging this simple line of a PHP script if($a == $b){ } I've found that with value of $a = '210010106140040100' (type = string) $b = '210010106140040101' (type = string) the result of the comparison is TRUE the same if i compare 2 integer $a = 210010106140040100 (type = int) $b = 210010106140040101 (type = int) $a == $b ( true ) If I use the === operator '210010106140040100' === '210010106140040101' (comparison of strings: result is FALSE) 210010106140040100 === 210010106140040101 (comparison of numbers: result is TRUE) I think it could be caused by the fact that the string is 'like' integer, but exceed the standard size of integer number. But the final result remain a mistery for me: I've tested some others 'big' numbers and I've found for example: 18014398509481980==18014398509481981 (true) !!!! 18014398509481982==18014398509481981 (false) !!!! In my specific script i can handle this specific comparison using the === operator, because i can assume that the variable are string. But i'd like to know why this happen, and i'd appreciate suggestions about how to efficiently compare 'big' integers. Thanks! I use PHP 5.2 with IIS Quote Link to comment Share on other sites More sharing options...
Mchl Posted October 9, 2009 Share Posted October 9, 2009 You're correct thinking it's because these numbers are larger than maximum integer limit. Once a number exceeds this limit, PHP stores it as double precision number which - despite its promising name - is not precise. http://en.wikipedia.org/wiki/Double_precision_floating-point_format [added] You can use mbstring bc math extension for dealing with large integers. Quote Link to comment Share on other sites More sharing options...
liviococco Posted October 20, 2009 Author Share Posted October 20, 2009 You're correct thinking it's because these numbers are larger than maximum integer limit. Once a number exceeds this limit, PHP stores it as double precision number which - despite its promising name - is not precise. http://en.wikipedia.org/wiki/Double_precision_floating-point_format [added] You can use mbstring bc math extension for dealing with large integers. In my example i needed to compare strings, and the 'numeric' value of strings was just a coincidence that broke my code ( so BC extension is not a choice ) . I've fixed it using '===' operators, but thanks a lot for helping discover the cause. Please mark as Resolved. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.