我正在显示高度下拉值和内容浮点值。当我在编辑表单上显示此下拉列表时,不显示其中选择的旧值高度。
我希望在我的下拉列表中显示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>
有人知道这个问题的解决方案吗?请帮忙。
答案 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>