PHP中intval()等int转换时的意外异常情况解析

162 篇文章 0 订阅
114 篇文章 0 订阅

关注微信公众号:wwwcoder,现在已将博客搬到这里,内容精选过后才发布出来。谢谢大家支持


先看看下面的网上的一个测试代码:

<?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="font-family:Simsun;font-size:12px;color:#000000;font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; "><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的。都是这个道理。好了。就这么简单的说说。至少比网上一大堆的不知所云好的多。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值