解析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个人网站架设连环讲(二)
Oct 09 PHP
解决php中Cannot send session cache limiter 的问题的方法
Apr 27 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
Jun 30 PHP
php打造智能化的柱状图程序,用于报表等
Jun 19 PHP
php实现smarty模板无限极分类的方法
Dec 07 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
Apr 02 PHP
PHP图片加水印实现方法
May 06 PHP
实例讲解php数据访问
May 09 PHP
PHP线程的内存回收问题
Jul 08 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
PHP使用Redis实现Session共享的实现示例
May 12 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
Oct 03 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动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
解析zend Framework如何自动加载类
2013/06/28 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
JavaScript类和继承 constructor属性
2010/03/04 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
微信小程序实现文件、图片上传功能
2020/08/18 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
Python处理文本文件中控制字符的方法
2017/02/07 Python
python网络编程之五子棋游戏
2020/05/14 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
农场厂长岗位职责
2013/12/28 职场文书
《美丽的田园》教学反思
2014/03/01 职场文书
毕业生写求职信的要点
2014/03/04 职场文书
五一口号
2014/06/19 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
教师自我剖析材料
2014/09/29 职场文书
2016八一建军节慰问信
2015/11/30 职场文书
详解Python生成器和基于生成器的协程
2021/06/03 Python
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
Golang 链表的学习和使用
2022/04/19 Golang
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript