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 に答える