浅谈PHP强制类型转换,慎用!


Posted in PHP onJune 06, 2013

PHP是一门弱类型的语言。这是它的优势和特点,但是有的时候你又不得不对类型进行相应的转换。

这个时候问题就来了。因为很多情况下,你会发现转换类型之后得到的数据和预期的值相差老大一截。

这里我以强制转换为整形作为例子。

看下面的代码,可以说你绝对不可能说出正确的答案。
echo (int) 123.999999999999999;
echo (int)   -1.999999999999999;
echo (int)   -1.9999999999999999;
echo (int)   -0.99999999999999999;
echo (int)  -10.999999999999999;
echo (int) -1000.9999999999999;
echo (int) -9999999999;

下面来看看我得到的结果。

首先要说明下我的系统环境。win7 X86

得到的结果如下

124
 -1
 -2
 -1
 -10
 -1001
 -1410065407

官方给出的说法是:

当从浮点数转换成整数时,将向零取整。

如果浮点数超出了整数范围(通常为 +/- 2.15e+9 = 2^31),则结果不确定,因为没有足够的精度使浮点数给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!

说了这么多,总结就一句话:精度不够关我鸟事!

看到这里,你可能会认为我上面举的例子有点牵强。因为根本不可能用到那么高的精度。

那么,我们来看下面的这个例子。

echo (int) ( (0.1+0.7) * 10 );

不用猜了,这里的执行结果是---7!

对,你没看错,我也没敲错,结果是 7 ,而不是我们通常认为的 8 。

现在,你知道PHP有多么操蛋了吧!

PHP官方有这么一句警告:

决不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。

所以在进行强制类型转换的时候一定要慎重!大数值,高精度,分数都要慎用!

当然,上面的那个例子可以这样来处理。
x$num = (0.1 + 0.7) * 10;
echo (int) $num;

PHP 相关文章推荐
php 学习资料零碎东西
Dec 04 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
Jun 13 PHP
php实现根据url自动生成缩略图的方法
Sep 23 PHP
php使用sql server验证连接数据库的方法
Dec 25 PHP
php使用数组填充下拉列表框的方法
Mar 31 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
php使用gzip压缩传输js和css文件的方法
Jul 29 PHP
PHP封装的MSSql操作类完整实例
May 26 PHP
PHP命名空间namespace及use的简单用法分析
Aug 03 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 PHP
php实现的生成排列算法示例
Jul 25 PHP
PHP实现简单登录界面
Oct 23 PHP
探讨file_get_contents与curl效率及稳定性的分析
Jun 06 #PHP
$_GET['goods_id']+0 的使用详解
Jun 06 #PHP
PHP编码规范的深入探讨
Jun 06 #PHP
PHP输出XML到页面的3种方法详解
Jun 06 #PHP
PHP转换文件夹下所有文件编码的实现代码
Jun 06 #PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 #PHP
PHP删除目录及目录下所有文件的方法详解
Jun 06 #PHP
You might like
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
php实现的简单日志写入函数
2015/03/31 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
超级强大的表单验证
2006/06/26 Javascript
将HTML自动转为JS代码
2006/06/26 Javascript
js实现收缩菜单效果实例代码
2013/10/30 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
[03:15]2014DOTA2国际邀请赛 专访国士无双信心满满
2014/07/12 DOTA
Django 2.0版本的新特性抢先看!
2018/01/05 Python
使用python生成目录树
2018/03/29 Python
Python unittest模块用法实例分析
2018/05/25 Python
利用pandas读取中文数据集的方法
2018/07/25 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
罗马尼亚在线杂货店:Pilulka.ro
2019/09/28 全球购物
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
Linux Interview Questions For software testers
2012/06/02 面试题
中文系学生自荐信范文
2013/11/13 职场文书
有个性的自我评价范文
2013/11/15 职场文书
QA工程师岗位职责
2013/11/20 职场文书
中专生的个人自我评价
2013/12/11 职场文书
公司新员工的演讲稿注意事项
2014/01/01 职场文书
24岁生日感言
2014/01/13 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
婚育证明样本
2015/06/16 职场文书
趣味运动会口号
2015/12/24 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript