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>

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

4

2 回答 2

1

正如马克在评论中所说,这是一个浮点精度问题。您可以通过使用这样的方法来解决此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 数学精度 - NullUserException

于 2013-09-27T09:04:46.837 回答
1

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

abs(5.6-$height) < 0.1

这将导致true5.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>
于 2013-09-27T09:05:49.950 回答