解析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数组对比函数,存在交集则返回真,否则返回假
Feb 03 PHP
php数组一对一替换实现代码
Aug 31 PHP
浅析51个PHP处理字符串的函数
Aug 02 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
Jun 19 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
Feb 08 PHP
浅析PHP中Session可能会引起并发问题
Jul 23 PHP
php反射类ReflectionClass用法分析
May 12 PHP
PHP中抽象类和抽象方法概念与用法分析
May 24 PHP
PHP正则表达式匹配替换与分割功能实例浅析
Feb 04 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 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 join函数应用
2011/05/04 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
自己的js工具_Form 封装
2009/08/21 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
JavaScript对象学习经验整理
2013/10/12 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
浅谈javascript 函数属性和方法
2015/01/21 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
详解express使用vue-router的history踩坑
2019/06/05 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
python学生信息管理系统
2018/03/13 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
创先争优承诺书范文
2014/03/31 职场文书
竞选大学学委演讲稿
2014/09/13 职场文书
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android