当我使用float 7/100时,php round无法正常工作

时间:2015-11-06 11:51:42

标签: php

我的代码非常简单,例如,我的php版本是5.5.11,这是我的示例代码:

$result = round(($num / 100), 2); // 0.070000000001
$result = $num / 100; // 0.070000000001

我的$result0.070000000001,如果是$num = 3$result是正确的。我使用var_dump($num),类型是浮点数。我该怎么解决?

修改

我找到了原因,但我不确定细节。我使用Codeigniter,我加载了一个库PHPExcel,这是第三方库,当我加载它时,我会遇到这个问题,但我不确定原因的详细信息。

2 个答案:

答案 0 :(得分:1)

正如我在评论中所写,它与浮点数存储在内存中的方式有​​关

来自手册:

  

永远不要将浮点数结果信任到最后一位,并且不要直接比较浮点数是否相等。如果需要更高的精度,可以使用任意精度数学函数和gmp函数。

http://php.net/manual/en/language.types.float.php

我不知道你想用这个浮点变量做什么,但是如果你想比较那么你需要一些$ epsilon

if(abs($a-$b) < $epsilon)

如果你想要圆,那么你应该忽略最后一位数。 number_format()似乎是更好的解决方案。

答案 1 :(得分:0)

这是浮动数字的问题。

您甚至可以尝试bccomp

    $a = 1.2 * 3;
    if (bccomp($a, 3.6) === 0) {
        echo 'equal';
    } else {
        echo 'not equal';
    }

    //echoes equal

    echo "----------------------";
    $a = 1.2 * 3;
    if ($a == 3.6) {
        echo 'equal';
    } else {
        echo 'not equal';
    }

    //echoes not equal