解析PHP中intval()等int转换时的意外异常情况
2024-08-29 01:46:23
<?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的。都是这个道理。
最新文章
- 重新想象 Windows 8 Store Apps (66) - 后台任务: 下载和上传
- 解决dede搜索页面只能显示10条信息解决方案
- 石英晶振频率后面带的PPM是什么单位
- tomcat启动Flash退出错误不能被视为解决该错误信息
- [Linux] PHP程序员玩转Linux系列-telnet轻松使用邮箱
- ViewData 不可以有特殊字符,比如. ,等只允许数字字符和空格
- jsp内置对象-page对象
- eclipse安装及配置pydev
- https协议为什么比http协议更加安全
- netty 对象序列化传输示例
- 使用 Weinre 调试移动网站
- 5.3Python函数(三)
- E: Unable to locate package openjdk-8-jdk 及java version 切换
- boost 1.67编译VS2017版本
- 单片机中printf函数的重映射
- RNA Spike-in Control(转)
- DeepWalk学习
- 初始化android studio的方法
- Android实践项目汇报(总结)
- redis sentinel无法启动问题