zoukankan      html  css  js  c++  java
  • 解析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的。都是这个道理。

     

  • 相关阅读:
    DVS6446教程链接
    今晚做的二值化和分割
    Sybase ETL
    QR码的结构
    cannot open file Default/configPkg/linker.cmd 错误
    QR 码的位置检测符
    QR Code
    C6000 OMAP DAVINCI的关系
    Davinci笔记 DSP子系统 VS ARM子系统
    ETL简介
  • 原文地址:https://www.cnblogs.com/w10234/p/5390469.html
Copyright © 2011-2022 走看看