解析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伪静态页面函数附使用方法
Jun 20 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
php中批量替换文件名的实现代码
Jul 20 PHP
php正则表达式(regar expression)
Sep 10 PHP
php写的带缓存数据功能的mysqli类
Sep 06 PHP
phpmailer发送gmail邮件实例详解
Jun 24 PHP
Smarty中的注释和截断功能介绍
Apr 09 PHP
php使用curl实现ftp文件下载功能
May 16 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
May 24 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
Aug 05 PHP
php提供实现反射的方法和实例代码
Sep 17 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 表单提交给自己
2008/07/24 PHP
php smarty模版引擎中的缓存应用
2009/12/02 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
php制作简单模版引擎
2016/04/07 PHP
实例讲解PHP表单处理
2019/02/15 PHP
(function($){...})(jQuery)的意思
2010/07/22 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
基于jquery日历价格、库存等设置插件
2020/07/05 jQuery
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
python使用nntp读取新闻组内容的方法
2015/05/08 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
工作睡觉检讨书
2014/02/25 职场文书
2014年内勤工作总结
2014/11/24 职场文书
统计工作个人总结
2015/03/03 职场文书
八年级作文之友情
2019/11/25 职场文书
PHP使用QR Code生成二维码实例
2021/07/07 PHP