关于使用intval强制转换成数字的问题。数字大于2147483647会出现溢出出现负数。使用个方法来替代这个吧
$n="\n";
$a=2147483648.05555;
echo intval($a).$n; //result -2147483648
echo (int) $a,$n;//result -2147483648
echo floatval($a).$n;//result 2147483648.0556
echo floor(floatval($a)).$n;//result 2147483648
呵呵。。好早就发现这个问题了。。这样解决就完全ok
这个是溢出了,深了不讲,简单讲两句.intval()这个我不多说,估计lz明白是转换成整数.我没有找到php类型的相关资料, 但我估计php用32位内存来保存一个整数,32位可以表示4294967296个数字,有符号的话就是-2147483647到2147483648,如果到达了上限制2147483648,也就是二进制32个1,如果你再加1并且强制它为整数,也就强制php是用32位来保存这个数,那么php将不能自动将整数转换为长整数,也就是不能进一位,那么整个二进制数将会变成32个0,也就是-2147483647,如果你一直往上加,每到了这个界限就会发生这种溢出,产生一种循环,也就是说整数只能表示-2147483647到2147483648之间的数.就说这么多,有问题请补充.
php手册的这两句话:
The integer value of var on success, or 0 on failure. Empty arrays and objects return 0, non-empty arrays and objects return 1.
The maximum value depends on the system. 32 bit systems have a maximum signed integer range of -2147483648 to 2147483647. So for example on such a system, intval('1000000000000') will return 2147483647. The maximum signed integer value for 64 bit systems is 9223372036854775807.
编程中发现,php中整型数的范围是,且一定是-2147483648 到2147483647
而mysql数据库的整形范围,可以有两种,在建表时确定
无符号0 到4294967295
有符号同上
php里的办法就是:不能使用intval,用floatval取代之。
$a = 21474836470; // 看上去是整数,实际是浮点数
$a = floatval(21474836470 ) //确保是一个数字