解析PHP中intval()等int转换时的意外异常情况
<?php
$a = 9.45*100;
var_dump($a);
var_dump(intval($a));
$a = 945*1.00;
var_dump($a);
var_dump(intval($a));
?>
运行结果: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中intval()等int转换时的意外异常情况的更多相关文章
- php下intval()和(int)转换有哪些区别
想知道使用intval()和(int)转换有什么区别? 或者说两者有什么不同,包括功能.定义方面的.或者和使用频率.效率等. 复制代码代码如下: <?php echo "<br ...
- 项目总结10:通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题
通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题 关键字 springboot热部署 ClassCastException异常 反射 ...
- intval()和(int)转换使用与区别
<?php echo "<br/>数值强制转换:"; $string="2a"; $string1=intval($string); echo ...
- C++ 中 char 与 int 转换问题
itoa 功 能:把一整数转换为字符串 函 数:char *itoa(int value, char *string, int radix); 解 释:itoa 是英文integer to ar ...
- C#中如何把int转换成两个字符的string
部门新开了项目,所以一整周的时间都在瞎忙,为什么称瞎忙?所负责的内容,并没有做好,也是一万个心塞啊.... 说一下最近碰到的一些问题. 用到了计时,但是比如定时是一分半钟,可是显示的时候,想让显示为1 ...
- php下intval()和(int)转换使用与区别
没啥区别,一般用(int),另外还有 float, string, array 等 intval()而言,如果参数是字符串,则返回字符串中第一个不是数字的字符之前的数字串所代表的整数值.如果字符串第一 ...
- 匿名内部类中不能修改int变量时、final int i 不能改变i的值时、或 i++线程不安全。使用AtomicInteger;
在匿名内部类或某某情况下中引入的变量必须是Final最终型的:这时还想要去修改这个变量就需要使用到AtomicInteger这个类了: AtomicInteger CarSize = new Atom ...
- 日期转换时Safari中返回Invalid Date
问题: 进行日期转换时,Safari中会返回Invalid Date, 而IE 9, Firefox, Chrome and Opera显示正常,代码如下所示: var d = new Date(&q ...
- 一段代码了解Java中char和int的转换
题目要求: 将输入的大写字母转成对应小写的后5个,如A转换后为f:如果转换后大于z则从a重新计,即多出1就转成a,多出2就转成b以此类推. Java代码: ```java private static ...
随机推荐
- 使用jquery的ajax方法获取下拉列表值
AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新,用户体验非常好. ...
- word中插入的代码库设置局部背景色
https://zhidao.baidu.com/question/1494951482361210539.html
- HTTP 状态码简介(对照)
HTTP状态码 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应 ...
- 模拟美式橄榄球比赛数据(R)
获得和清洗数据: 1.从网络上抓取数据 year<- url<-paste("http://sports.yahoo.com/nfl/stats/byteam?group=Off ...
- python——单例模式
单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在. 当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 比如, ...
- mysql分组查询报错
执行sql group by查询时报错 SELECT id from userz GROUP BY username Expression #1 of SELECT list is not in GR ...
- 谷歌机器学习速成课程---3降低损失 (Reducing Loss):学习速率
正如之前所述,梯度矢量具有方向和大小.梯度下降法算法用梯度乘以一个称为学习速率(有时也称为步长)的标量,以确定下一个点的位置.例如,如果梯度大小为 2.5,学习速率为 0.01,则梯度下降法算法会选择 ...
- 如何在IAR中配置CRC参数(转)
源:如何在IAR中配置CRC参数 前言 STM32全系列产品都具有CRC外设,对CRC的计算提供硬件支持,为应用程序节省了代码空间.CRC校验值可以用于数据传输中的数据正确性的验证,也可用于数据存储时 ...
- 【iOS和HTML 5交互】iOS中加载html5调用html方法和修改html5内容
近期项目开发中用到了这方面的技术了,那我们一起来看看. 1.利用webView控件加载本地html5或者网络上html5 2.设置控制器为webView的代理,遵守协议 3.实现代理方法webView ...
- Objective-C与Swift的混合编程
Swift 被设计用来无缝兼容 Cocoa 和 Objective-C .在 Swift 中,你可以使用 Objective-C 的 API(包括系统框架和你自定义的代码),你也可以在 Objecti ...