浅谈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 相关文章推荐
我的论坛源代码(六)
Oct 09 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
Aug 20 PHP
dedecms中使用php语句指南
Nov 13 PHP
php使用递归计算文件夹大小
Dec 24 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
Feb 08 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
PHP巧妙利用位运算实现网站权限管理的方法
Mar 12 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
PHP基于openssl实现的非对称加密操作示例
Jan 11 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 PHP
php如何获取Http请求
Apr 30 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
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP常用header头定义代码示例汇总
2020/08/29 PHP
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
详解React 元素渲染
2020/07/07 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
Python操作列表之List.insert()方法的使用
2015/05/20 Python
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
Python根据成绩分析系统浅析
2019/02/11 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
趣味游戏活动方案
2014/02/07 职场文书
建筑学专业自荐书
2014/07/09 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
社区植树节活动总结
2015/02/06 职场文书
行政助理岗位职责
2015/02/10 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
重温入党誓词主持词
2015/06/29 职场文书
人事任命书范本
2015/09/21 职场文书
班主任经验交流心得体会
2015/11/02 职场文书
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server