首页 > 解决方案 > 带有浮点数的for循环中的PHP if条件

问题描述

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

我正在使用 PHP 7.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
1.99
2.99
3.99
4.99
5.99
6.99
7.99
8.99
9.99
10.99<--- selected
11.99
12.99
13.99
14.99
15.99
16.99
17.99
18.99
19.99
20.99
21.99
22.99
23.99
24.99
25.99
26.99
27.99
28.99
29.99

当条件介于 之间时,这仍然成立,但是,不返回0.99 - 15.99更改 之间的条件。16.99 - 29.99<--- selected

我在循环中使用 int 进行了一些测试,如下所示,它似乎工作正常。

for($i = 0; $i<= 30; $i++){
    echo $i;
    if($i == 18){
        echo '<--- selected';
    }
    echo '<br>';
}

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

标签: phploops

解决方案


让我们在开始比较之前清理浮动。

<?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>';
}

推荐阅读