浅谈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处理json时中文问题的解决方法
Apr 12 PHP
在项目中寻找代码的坏命名
Jul 14 PHP
PHP递归调用的小技巧讲解
Feb 19 PHP
php生成N个不重复的随机数实例
Nov 12 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
Jun 26 PHP
destoon实现调用热门关键字的方法
Jul 15 PHP
php两种无限分类方法实例
Apr 21 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
Mar 28 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
PHP后期静态绑定之self::限制实例分析
Dec 21 PHP
PHP单元测试配置与使用方法详解
Dec 27 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
用缓存实现静态页面的测试
2006/12/06 PHP
PHP编码规范-php coding standard
2007/03/16 PHP
php输入数据统一类实例
2015/02/23 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
尽可能写"友好"的"Javascript"代码
2007/01/09 Javascript
js文字滚动停顿效果代码
2008/06/28 Javascript
js CSS操作方法集合
2008/10/31 Javascript
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
JavaScript函数详解
2015/02/27 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
2017/06/20 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
原生js实现点击轮播切换图片
2020/02/11 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
利用Python实现图书超期提醒
2016/08/02 Python
python的继承知识点总结
2018/12/10 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
python re模块和正则表达式
2021/03/24 Python
护理专业个人求职简历的自我评价
2013/10/13 职场文书
大学国际贸易专业自荐信
2014/06/05 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
青岛市的收音机研制与生产
2022/04/07 无线电