解析PHP中intval()等int转换时的意外异常情况


Posted in PHP onJune 21, 2013

先看看下面的网上的一个测试代码:

<?php
$a = 9.45*100;
var_dump($a);
var_dump(intval($a));
$a = 945*1.00;
var_dump($a);
var_dump(intval($a));
?><SPAN style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; DISPLAY: inline !important; FONT: 12px Simsun; WHITE-SPACE: normal; ORPHANS: 2; FLOAT: none; LETTER-SPACING: normal; COLOR: #000000; WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN><SPAN></SPAN></SPAN></SPAN><SPAN><SPAN></SPAN></SPAN>

运行结果:float(945) int(944) float(945) int(945)
这个代码虽然把结果都告诉了,但是很多人还是看不懂,这样就解释不了为什么会有意想不到的转型情况发生。
网上对这个情况讲的都模棱两可不知所云的。我在这里简单的解释下:
9.45这个数字在我们看到的是这样的,但是机器内部却不是这个,而是9.44999999999999999...。所以:
9.449999*100 = 944.9999。这样就可以看懂了吧?intval把尾数直接去掉了,这个叫神马来的呵呵忘了名字了.这样说来,intval和floor()函数差不多咯。呵呵。这个也是我之前没有察觉到的。也没注意到intval会向下舍入。
而 1.00就没有什么1.0099999这样的了,所以945*1.00就会出现一个float的945.那intval去转型自然就不会出现944的情况了。
还有些经典考试题,如:intval((0.1+0.7)*10) 等于7而不是8的。都是这个道理。好了。就这么简单的说说。至少比网上一大堆的不知所云好的多。
PHP 相关文章推荐
发挥语言的威力--融合PHP与ASP
Oct 09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续二
Apr 03 PHP
网页游戏开发入门教程二(游戏模式+系统)
Nov 02 PHP
php 连接mysql连接被重置的解决方法
Feb 15 PHP
深入解析php中的foreach函数
Aug 31 PHP
php中session退出登陆问题
Feb 27 PHP
ThinkPHP添加更新标签的方法
Dec 05 PHP
10个简化PHP开发的工具
Dec 25 PHP
smarty的section嵌套循环用法示例
May 28 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
May 19 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 PHP
详解Laravel服务容器的优势
May 29 PHP
解析zend studio中直接导入svn中的项目的方法步骤
Jun 21 #PHP
解析coreseek for sphinx的使用
Jun 21 #PHP
关于使用coreseek并为其做分页的介绍
Jun 21 #PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 #PHP
探讨GDFONTPATH能否被winxp下的php支持
Jun 21 #PHP
浅析php中jsonp的跨域实例
Jun 21 #PHP
解析php中array_merge与array+array的区别
Jun 21 #PHP
You might like
在PHP中使用反射技术的架构插件使用说明
2010/05/18 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
js动态切换图片的方法
2015/01/20 Javascript
手动初始化Angular的模块与控制器
2016/12/26 Javascript
微信小程序 开发MAP(地图)实例详解
2017/06/27 Javascript
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
请求时token过期自动刷新token操作
2020/09/11 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
浅谈Python基础之I/O模型
2017/05/11 Python
Python中pillow知识点学习
2018/04/30 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
Django 用户认证组件使用详解
2019/07/23 Python
Python读写文件模式和文件对象方法实例详解
2019/09/17 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
python 制作简单的音乐播放器
2020/11/25 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
QA工程师岗位职责
2013/11/20 职场文书
大学生毕业评语
2014/12/31 职场文书
行政司机岗位职责
2015/04/10 职场文书
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android