测试了一下,就是91。
PHP的此bug不存在,鉴定完毕

解决方案 »

  1.   

    我这测试结果111难道是,这个是php5.x才有的问题??回家试验下,家里面可是3.x  4.x都有的说ceil:计算大于指定数的最小整数。
      

  2.   

    不过,在这用的IIS+php,回家用apache+php测试吧
      

  3.   

    91
    WindowsXP + Apache2 + PHP5
      

  4.   

    echo ceil(100/1.1); 疯掉了吧
      

  5.   

    晕,我按/算的……echo ceil(100*1.1);   //111
      

  6.   

    <?php
    printf('%.14f<br>', 100*1.1);
    echo ceil(100*1.1);
    echo '<br>';
    printf('%.14f<br>', 100/1.1);
    echo ceil(100/1.1);
    ?>
    110.00000000000001
    111
    90.90909090909091
    91
    有什么问题吗?
    ceil 返回不小于传入参数的最小整数
      

  7.   

    因为1.1是浮点型,浮点型*100还是浮点型,1.1*100=110.00...,ceil后就变成111了,就是这样,不是bug
      

  8.   

    没有问题啊,这个ceil在php4/5版本下都没有问题!
      

  9.   

    printf('%.14f<br/>', 100*1.1);
    echo ceil(100*1.1);为啥是110.00000000000001呢?
      

  10.   

    因为小数点后取14位,
    这样;
    <?
    printf('%.1f<br/>', 100*1.1);
    echo ceil(100*1.1);
    ?>
    就是110.0 结果还是111。
      

  11.   

    printf('%.14f<br/>', 100*1.1);
    echo ceil(100*1.1);为啥是110.00000000000001呢?-------------------------------
    这个是基础知识....
      

  12.   

    这算什么BUG.晕自己用这函数难道不清楚这函数和特性?
      

  13.   

    我是说为什么100*1.1=110.00000000000001------------------------------------------
    计算机处理整型值很精确,但处理小数时用 float 或 double 浮点类型就会有误差了,而且这是不可避免的。
      

  14.   

    来北京了。呵呵。谢谢zeroleonhart
      

  15.   

    我来拿分
    首先要了解php的变量类型,他明确的声明了这个问题。十进制的分数在转换为二进制的格式时,可能会丢失一点点精度。像 0.1 或0.7不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10)  通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。这里的ceil(100*1.1)返回的不是预期中的110而是111,应该是该结果内部表示其实是类似110.000000...1(中间不大于14个零)。再看ceil (100*1.3) 返回的就是我们预期中的130而不是延续上面的131。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。 这个现象是格式转换时精度损失所造成的。
      

  16.   

    楼上的楼上是达人。浮点型保存在计算机中转换成2进制要进行一次数据的规格化。比如在C中浮点数的表示遵循IEEE 754标准。规格化数时。因为有效位有限就会产生精度的损失。如果楼主想要了解的更清楚可以查阅计算机组成原理书籍。多数在第一或第二章就有详细的解释。如果只想会用。就记得达人的话。永远不要相信浮点数是精确的!