$tmp = 570.00+7.80+35.10+3.90+3.90+7.80+19.50;
if($tmp != 648)
 echo "tmp is:[$tmp]";蛋疼啊 各种 intval floatval ===全等 都试过了 就差看PHP源代码了! 不知道是我这边的php版本bug还是啥的
求教各位大虾....主要环境信息:
PHP API  20041225
PHP Extension  20060613
Zend Extension  220060519 Apache Version  Apache/2.2.17 (Unix) DAV/2 PHP/5.2.17 SVN/1.6.16
Apache API Version  20051115 

解决方案 »

  1.   

    $tmp = 570.00+7.80+35.10+3.90+3.90+7.80+19.50;
    printf('%.14f', $tmp);647.99999999999989建议你补习一下计算机基础知识:数的表示
      

  2.   

    觉得是bug 的都给怪署黍捏下蛋.
      

  3.   

    浮点数千万不要随便进行直接的比较·····
    浮点数在计算机内部存储的是不保证精度的···
    看看PHP手册的浮点数吧,如果要比较就这样abs($a-648)<0.00001,后面的0.00001换成你可接受的精度就行了。
      

  4.   

    var_dump(0.1 + 0.2  == 0.3);
    结果是false
      

  5.   

    受教啦=。=!
    php弱类型 我一直以为是如果和值是整数的话 php 会自动转换成int型
    回去看看php手册。
    php使用确实方便的同时也比较容易出现疏忽啊。
      

  6.   

    恩啊, 我是php菜鸟 呵呵
    我的意思就是有时候php框的比较泛,会让人遗漏一些细节。
    最开始的时候发现一个字符串形式的数字和一个二进制的数字能比较,我就比较认为php会比较智能处理这些问题。
      

  7.   


    php提供了弱的比较(==)和强的比较(===)两种比较形式,可以根据你的需要选择。
    至于你的问题,那是浮点数"陷阱",主要原因是浮点数是无法精确表示的,即使在C语言中也是类似的
      

  8.   

    这和弱类型没关系,php和js一样,算法采用的是IEEE 754标准,就存在这个BUG