解析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 相关文章推荐
codeigniter集成ucenter1.6双向通信的解决办法
Jun 12 PHP
php静态文件返回304技巧分享
Jan 06 PHP
php去除html标记的原生函数详解
Jan 27 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
Dec 17 PHP
Yii中实现处理前后台登录的新方法
Dec 28 PHP
PHP巧妙利用位运算实现网站权限管理的方法
Mar 12 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
php从数据库中获取数据用ajax传送到前台的方法
Aug 20 PHP
PHP实现的敏感词过滤方法示例
Mar 06 PHP
Laravel开启跨域请求的方法
Oct 13 PHP
Yii框架自定义数据库操作组件示例
Nov 11 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 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 nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
2009/08/21 PHP
php下将XML转换为数组
2010/01/01 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
不同浏览器的怪癖小结
2010/07/11 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
JS小游戏之宇宙战机源码详解
2014/09/25 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
判断颜色是否合法的正则表达式(详解)
2017/05/03 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
python算法学习之桶排序算法实例(分块排序)
2013/12/18 Python
python使用webbrowser浏览指定url的方法
2015/04/04 Python
使用Python中的tkinter模块作图的方法
2017/02/07 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
python定时任务 sched模块用法实例
2019/11/04 Python
NumPy排序的实现
2020/01/21 Python
python可视化text()函数使用详解
2020/02/11 Python
Python中if有多个条件处理方法
2020/02/26 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
幼儿教师培训感言
2014/03/08 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python
springboot 多数据源配置不生效遇到的坑及解决
2021/11/17 Java/Android
Python装饰器的练习题
2021/11/23 Python
python全面解析接口返回数据
2022/02/12 Python
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS