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

在PHP中为循环和HTML选择选项选择所选值-不工作?,php,html,loops,Php,Html,Loops,以下是循环和代码: $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

以下是循环和代码:

$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>";
        }
$rev_sel=0.01;
对于($i=1.00;$i>=0;$i=$i-.01){
$val=$i;
$val2=$val*100;
回显“$val2.”%;
}

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

你确实需要这样做:

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

您确实需要这样做:

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

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

<?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 ?>


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

<?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>";
    }
$rev_sel=0.01;
对于($i=1.00;圆形($i,2)>=0;$i=$i-.01){
$val=$i;
$val2=$val*100;
回显“$val2.”%;
}

您可以像下面这样做,以便与浮点值进行精确比较

$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>";
    }
$rev_sel=0.01;
对于($i=1.00;圆形($i,2)>=0;$i=$i-.01){
$val=$i;
$val2=$val*100;
回显“$val2.”%;
}

一些程序员在遇到问题时,会想“我知道,我会使用浮点运算。”现在他们有1.9999999997个问题。我想我没有得到参考,我不是30年的专业人士或其他什么,但是它打印出了select并显示了我想要使用的值。你无法精确比较浮点数据类型的
=
。一些程序员在遇到问题时,会想“我知道,我会使用浮点算术。”现在他们有1.9999999997个问题。我想我没有得到参考,我不是一个30年的专业人士或其他什么,但它打印出的选择很好,并显示了我想要使用的值。你无法精确比较浮点数据类型的
==
。我不敢相信我忘记了,谢谢你提醒我。浮点是愚蠢的。谢谢:)总是检查/测试输出!真不敢相信我忘了,谢谢你提醒我。浮点是愚蠢的。谢谢:)总是检查/测试输出!