下拉浮点值不显示选中的选项

时间:2013-09-27 08:51:19

标签: php html5

我正在显示高度下拉值和内容浮点值。当我在编辑表单上显示此下拉列表时,不显示其中选择的旧值高度。

我希望在我的下拉列表中显示5.6英尺高度值,其值为4,4.1,4.2 .... 6.10,6.11,7等。

以下是我使用的代码

<select name="height">
    <?php for($height=(4.0); $height <= 7; $height=($height+0.1) ): ?>
        <option value='<?php echo $height;?>' <?php if((5.6) == ($height)) echo "selected=selected"; ?> ><?php echo $height;?> ft</option>
    <?php endfor;?>                     
</select>

有人知道这个问题的解决方案吗?请帮忙。

2 个答案:

答案 0 :(得分:1)

正如Mark在评论中所说,这是一个浮点精度问题。您可以使用round()上的$height来解决此问题:

<select name="height">
    <?php for($height=(4.0); $height <= 7; $height=($height+0.1) ): ?>
        <option value='<?php echo $height;?>' <?php if(5.6==round($height,2)) echo "selected=selected"; ?> ><?php echo $height;?> ft</option>
    <?php endfor;?>                     
</select>

可在此处找到更多信息:A: PHP Math Precision - NullUserException

答案 1 :(得分:1)

比较PHP中的浮点可能会非常痛苦。该问题的解决方案可能是进行以下比较,而不是5.6 == $height

abs(5.6-$height) < 0.1

这将导致true为5.6,false为其他值。

完整解决方案:

<select name="height">
    <?php for($height=(4.0); $height <= 7; $height=($height+0.1) ): ?>
        <option value='<?php echo $height;?>' <?php if(abs(5.6-$height) < 0.1) echo "selected=selected"; ?> ><?php echo $height;?> ft</option>
    <?php endfor;?>                     
</select>