用了几年的php今天才注意到在32位环境下php去大数字取模为负数情况存在。在32位php运行环境下,被取模的数字不能大于数字2147483648,除了php手册中说明的采用fmod函数的方式获取正确数值外,现在大部分的服务器已经是64位话,在php编译为64位运行时时,是可以正常支持到更大的取模运算,这时候当数值大于2147483647时取模是不会出现负数的。也就是说当我们php运行在64位环境下同时编译的php为64位版本一般不会出现负数问题,除非你的被取模数字大于9223372036854775808,此时已经超过有符号64位的最大取值范围了。
注意如果取模数值超过了64位的最大整型值,这时候取模得到的数值都为0。如果更大的数值取模保险的方式还是使用fmod函数,