带浮点数的for循环中的PHP if条件

带浮点数的for循环中的PHP if条件,php,loops,Php,Loops,for循环中的if条件将在(n)次之后停止工作 我使用的是PHP7.3.6-1+ubuntu18.04.1+deb.sury.org+1 给定以下代码: for($i = 0.99; $i<= 30.99; $i++){ echo $i; if($i == 10.99){ echo '<--- selected'; } echo '<br>'; } 我认为问题与这个浮动(0.99-30.99)有关。在开始比较之前,让我们先

for循环中的if条件将在(n)次之后停止工作

我使用的是PHP7.3.6-1+ubuntu18.04.1+deb.sury.org+1

给定以下代码:

for($i = 0.99; $i<= 30.99; $i++){
    echo $i;
    if($i == 10.99){
        echo '<--- selected';
    }
    echo '<br>';
}

我认为问题与这个浮动(0.99-30.99)有关。

在开始比较之前,让我们先清理一下浮动

<?php
for($i = 0.99; $i<= 30.99; $i++){
    $i = number_format((float)$i, 2);
    echo $i;
    if($i == 16.99){
        echo '<--- selected';
    }
    if($i == 29.99){
        echo '<--- selected';
    }
    if($i == 10.99){
        echo '<--- selected';
    }
    echo '<br>';
}

一种可能的解决方案是让数字串起来,这样比较它们。
一边使用“10.99”,另一边使用数字格式

for($i = 0.99; $i<= 30.99; $i++){
    echo $i;
    if(number_format($i,2) == "22.99"){
        echo '<--- selected';
    }
    echo "\n";
}

用于($i=0.99;$i有关浮点的详细信息:谢谢。我会将其删除。在格式化到小数点后第二位后,我们可以使用常规浮点比较而不是字符串,否?请检查我的答案,我是否尝试过它,它是否有效。为了简单起见,我会接受这个答案,但您能否解释一下:为什么它在<代码之间返回true>当我测试时,0.99到15.99
和false介于
16.99到30.99
之间。@因为浮点值不精确。如果使用0.999,很可能会不一样。请参阅我在上面的评论中发布的链接,还有其他文章和YouTube视频对此进行了解释。我尝试了这一点,它成功了。但我的问题是,它为什么返回true介于
0.99到15.99之间
和假介于
16.99到30.99之间
<?php
for($i = 0.99; $i<= 30.99; $i++){
    $i = number_format((float)$i, 2);
    echo $i;
    if($i == 16.99){
        echo '<--- selected';
    }
    if($i == 29.99){
        echo '<--- selected';
    }
    if($i == 10.99){
        echo '<--- selected';
    }
    echo '<br>';
}
for($i = 0.99; $i<= 30.99; $i++){
    echo $i;
    if(number_format($i,2) == "22.99"){
        echo '<--- selected';
    }
    echo "\n";
}