php float 溢出,php中intval函数溢出的解决办法

关于使用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 ) //确保是一个数字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值