2013-09-27 68 views
4

我显示下拉的高度和它的内容浮动值。当我在编辑表单上显示这个下拉列表时,并没有显示在其中选择的旧的高度值。下拉浮动值不显示选项

我要显示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> 

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

+5

浮点精度问题:'' –

+0

你也可以在这里找到解决方案.. http://stackoverflow.com/questions/3148937/compare-floats-in-php&http://www.php.net/manual/en/language.types。 float.php –

回答

1

正如马克在评论中所说,这是一个浮点精度问题。你可以在你的$height使用round()这样解决这个问题:

<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

+0

谢谢杰米!它对我来说工作得很好。 –

+0

很高兴能帮到你! –

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>