【问题标题】:unexpected php math decimals operation意外的 php 数学小数操作
【发布时间】:2011-07-14 04:32:00
【问题描述】:
    $nt=(float) number_format("26031.87",2,".",""); // 26031.87
    $nt2=(float) 546669.02-520637.15; // 26031.87

    if($nt>$nt2)
     echo "$nt / $nt2 ⇽ What's wrong with this!? :@";

重点是为什么会发生这种情况?如果视觉上看起来相同,一个粗略的解决方案是对 $nt2 执行 number_format(),但是...为什么??

更新 :: $nt-$nt2 输出 3.6379788070917E-12

【问题讨论】:

    标签: php decimal


    【解决方案1】:

    http://php.net/manual/en/language.types.float.php 看到那个大红色警告横幅。 :)

    为了比较浮点数,您可以使用:

    if (abs($nt1-$nt2) < 0.00001) {
        echo "Equal!";
    }
    

    (将0.00001更改为您需要的比较精度)。

    【讨论】:

      【解决方案2】:

      每 Zend:

      比较两个浮点数时,PHP 似乎没有做合乎逻辑的事情,这是由于数字的内部表示。解决方案就是永远不要比较浮点数是否相等!

      在比较它们之前将它们转换为 INT 或使用 bc_math。

      【讨论】:

        猜你喜欢
        • 2022-11-01
        • 2014-09-04
        • 2012-06-13
        • 1970-01-01
        • 2020-06-10
        • 2022-11-10
        • 2010-12-10
        • 1970-01-01
        • 2011-10-21
        相关资源
        最近更新 更多