在 PHP 中为循环和 HTML 选择选项选择所选值 - 不起作用


Selecting the selected value in PHP for loop and HTML select options - not working?

下面是循环和代码:

$rev_sel = 0.01;
    for($i=1.00; $i>=0; $i=$i-.01) {
        $val = $i;
        $val2 = $val * 100;
        echo "<option value='".$i."'";
        if($i == $rev_sel) echo "selected='selected'";
        echo ">".$val2."%</option>";
        }

据我所知,这应该在弹出时选择 1%,或者 $rev_sel 设置为 0 到 1.00 之间的任何内容。 事实并非如此。 有人知道为什么吗?

你确实需要像这样四舍五入:

<?php
$rev_sel = 0.01;
    for($i=1.00; $i>=0; $i=$i-.01) {
        $val = round($i, 2);
        $val2 = $val * 100;
        echo "<option value='".round($i,2)."'";
        if(round($i,2) == $rev_sel) echo "selected='selected'";
        echo ">".$val2."%</option>'n";
        }

您的代码正在输出:

<option value='0.13'>13%</option>
<option value='0.12'>12%</option>
<option value='0.11'>11%</option>
<option value='0.099999999999999'>9.9999999999999%</option>
<option value='0.089999999999999'>8.9999999999999%</option>
<option value='0.079999999999999'>7.9999999999999%</option>
<option value='0.069999999999999'>6.9999999999999%</option>

0.00999999...等不等于0.01

不能直接比较浮点数。你最好比较整数或字符串,例如

<?php
$rev_sel = 1;
for ($i = 100; $i <= 0; $i--) :
$selected = $rev_sel == $i ? ' selected="selected"' : '';
?>
<option value="<?php printf('%.2f', $i / 100) ?>"<?php echo $selected ?>><?php echo $i ?>%</option> 
<?php endfor ?>
您可以

像下面这样执行此操作,以与浮点值进行精确比较...

$rev_sel = 0.01;
for($i=1.00; round($i,2) >= 0; $i = $i-.01) {
    $val = $i;
    $val2 = $val * 100;
    echo "<option value='".$i."'";
    if($i == $rev_sel) echo "selected='selected'";
    echo ">".$val2."%</option>";
    }