解析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 CLI模式下的多进程应用分析
Jun 03 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
ThinkPHP分页类使用详解
Mar 05 PHP
php下获取http状态的实现代码
May 09 PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
php判断是否连接上网络的方法实例详解
Dec 14 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
Apr 20 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 PHP
php判断/计算闰年的方法小结【三种方法】
Jul 06 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 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常用设计模式之委托设计模式
2016/02/13 PHP
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
Angularjs 基础入门
2014/12/26 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
微信小程序后端实现授权登录
2020/02/24 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
python访问纯真IP数据库的代码
2011/05/19 Python
python正则表达式的使用
2017/06/12 Python
Python 统计字数的思路详解
2018/05/08 Python
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
用python3 返回鼠标位置的实现方法(带界面)
2019/07/05 Python
Django中间件基础用法详解
2019/07/18 Python
Django模板Templates使用方法详解
2019/07/19 Python
Python中if有多个条件处理方法
2020/02/26 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
女大学生个人求职信
2013/12/09 职场文书
教师考核评语
2014/04/28 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
初中军训感想
2015/08/07 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技