0

这是循环和代码:

$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 之间的任何值。事实并非如此。有人知道为什么吗?

4

3 回答 3

3

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

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

于 2012-05-04T06:20:38.550 回答
1

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

<?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 ?>
于 2012-05-04T06:23:32.263 回答
0

您可以按如下方式执行此操作,以与浮点值进行精确比较...

$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>";
    }
于 2013-01-09T06:58:18.887 回答