解析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实现telnet功能示例
Apr 08 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
Jul 08 PHP
PHP经典面试题之设计模式(经常遇到)
Oct 15 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
深入理解PHP 数组之count 函数
Jun 13 PHP
golang与PHP输出excel示例
Jul 22 PHP
微信公众号模板消息群发php代码示例
Dec 29 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 PHP
简单谈谈PHP面向对象之标识对象
Jun 27 PHP
Laravel 关联模型-关联新增和关联更新的方法
Oct 10 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
Feb 07 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 向访客和爬虫显示不同的内容
2009/11/09 PHP
选择PHP作为网站开发语言的原因分享
2012/01/03 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
php中请求url的五种方法总结
2017/07/13 PHP
javascript在一段文字中的光标处插入其他文字
2007/08/26 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
2015/11/17 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
2019/09/16 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
JavaScript canvas仿代码流瀑布
2020/02/10 Javascript
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
Python----数据预处理代码实例
2019/03/20 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
python中tab键是什么意思
2020/06/18 Python
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
英国亚马逊官方网站:Amazon.co.uk
2019/08/09 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
求职信需要的五点内容
2014/02/01 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
个人优缺点总结
2015/02/28 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
Nginx快速入门教程
2021/03/31 Servers
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis