当我使用float 7/100时,php循环不起作用

当我使用float 7/100时,php循环不起作用,php,Php,我的代码非常简单,例如,我的php版本是5.5.11,这是我的示例代码: $result = round(($num / 100), 2); // 0.070000000001 $result = $num / 100; // 0.070000000001 我得到的$result是0.070000000001,如果$num=3,则$result是正确的。我使用了var\u dump($num),类型是float。我怎样才能修好它 编辑 我找到了原因,但我不确定细节。我使用Codeigniter

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

$result = round(($num / 100), 2); // 0.070000000001
$result = $num / 100; // 0.070000000001
我得到的
$result
0.070000000001
,如果
$num=3
,则
$result
是正确的。我使用了
var\u dump($num)
,类型是float。我怎样才能修好它

编辑


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

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

从手册:

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

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

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


若你们想四舍五入,那个么你们可能应该忽略最后一位数字。数字格式()似乎是更好的解决方案。

这就是浮点数的问题

你甚至可以试试


它与浮点数字如何存储在PC存储器中有关。它工作正常,没有问题。确切的格式只能通过字符串实现,使用我的代码有很多逻辑,我不能显示很多代码,我想知道什么原因会导致这个问题。然后阅读我的答案并查看手册中的链接。有一个红色的大盒子可以很好地解释这一点。
    $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