解析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 计算两个时间戳相隔的时间的函数(小时)
Dec 18 PHP
兼容性比较好的PHP生成缩略图的代码
Jan 12 PHP
让PHP以ROOT权限执行系统命令的方法
Feb 10 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
Jul 03 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
Sep 28 PHP
PIGCMS 如何关闭聊天机器人
Feb 12 PHP
mysql_escape_string()函数用法分析
Apr 25 PHP
cakephp常见知识点汇总
Feb 24 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
Jun 09 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 PHP
laravel ajax curd 搜索登录判断功能的实现
Apr 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之第九天
2006/10/09 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
jquery控制select的text/value值为选中状态
2014/06/03 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
javascript实现简单的html5视频播放器
2015/05/06 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
详解javascript中var与ES6规范中let、const区别与用法
2020/01/11 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
使用python实现baidu hi自动登录的代码
2013/02/10 Python
Python文件操作之合并文本文件内容示例代码
2017/09/19 Python
python连接数据库的方法
2017/10/19 Python
实时获取Python的print输出流方法
2019/01/07 Python
python 反编译exe文件为py文件的实例代码
2019/06/27 Python
python 实现人和电脑猜拳的示例代码
2020/03/02 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
英国办公用品商店:Office Outlet
2018/04/04 全球购物
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
一套英文Java笔试题面试题
2016/04/21 面试题
公司业务员岗位职责
2014/03/18 职场文书
2014年计生标语
2014/06/23 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS