今天把一直本地测试的php程序放到外网的机器跑(64位系统),没想到一个纯算数值的算法竟然得到不一样的结果,最后锁定在一个求模的操作上:$i % 4, $i在本地和server上打印出来都是434807526976, 但是求出来的结果却不一样~
原因是:
php的整型最大值为2147483647(32位系统上), 当数值赋值超过这个最大值时,变量便自动成为浮点型. 所以虽然打印出来一样,但本地打印的是一个是浮点型的$i,而server上是64位系统,整型最大值达到9223372036854775807 .... $i依然是一个整型.
取模运算的结果不一样是因为php在对数值取模运算时会把浮点数转换为整型再取模(这点就不如js了,js是可以对浮点取模运算地~)
所以本地32位系统运行的其实是: ((int) $i) % 4 即 512559680 % 4
解决方法 : 最后为了保持与其他平台的一致,强制在64系统也"溢出" : ($i & 0xFFFFFFFF) % 4
------------------------------------------------
php也是一个比较无厘头的东西~
哈哈,我也遇到了这种情况,不过,我是在生成sql时出错。