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 Link to comment https://forums.phpfreaks.com/topic/177064-solved-210010106140040100-210010106140040101-true/ 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. Link to comment https://forums.phpfreaks.com/topic/177064-solved-210010106140040100-210010106140040101-true/#findComment-933584 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. Link to comment https://forums.phpfreaks.com/topic/177064-solved-210010106140040100-210010106140040101-true/#findComment-940240 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.