解析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垃圾回收机制简单说明
Jul 22 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 PHP
PHP 查找字符串常用函数介绍
Jun 07 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
Jul 02 PHP
php使用curl模拟登录后采集页面的例子
Nov 04 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
PHP中COOKIES使用示例
Jul 26 PHP
PHP面试题之文件目录操作
Oct 15 PHP
php文件上传、下载和删除示例
Aug 28 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
Dec 15 PHP
PHP利用百度ai实现文本和图片审核
May 08 PHP
php curl发送请求实例方法
Aug 01 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
动易数据转成dedecms的php程序
2007/04/07 PHP
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
浅谈json_encode用法
2015/03/05 PHP
jQuery chili图片远处放大插件
2009/11/30 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
[07:06]2018DOTA2国际邀请赛寻真——卫冕冠军Team Liquid
2018/08/10 DOTA
Python正则表达式教程之一:基础篇
2017/03/02 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
2020/10/18 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
Bed Bath & Beyond加拿大官网:购买床上用品、浴巾、厨房电器等
2019/10/04 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
大学生实习感言
2014/01/16 职场文书
安全检查与奖惩制度
2014/01/23 职场文书
幼儿园师德演讲稿
2014/05/06 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书