数据库中的浮点值无法正确显示php

时间:2015-10-09 06:16:10

标签: php mysql

以下是显示带有数据库条目的选择框的代码。

  

问题是数据库中的值1.2和1.3显示为   1.2000000476837和1.2999999523163,即使其他浮点值显示正确。


我将不胜感激。

<select name="capacity" tabindex="7">
                        <option value="">Odaberi kapacitet</option>
                        <?php
                        $query_select_capacity=$db->prepare("SELECT id_capacity, capacity FROM capacity");
                        $query_select_capacity->execute();
                        $result=$query_select_capacity->fetchAll(PDO::FETCH_ASSOC);
                        foreach($result as $res){
                                echo "<option value='".$res['id_capacity']."'>".$res['capacity']."&nbsp;&nbsp;</option>";
                        }
                        ?>
           </select>

这是数据库表。

CREATE TABLE IF NOT EXISTS `capacity` (
`id_capacity` int(11) NOT NULL AUTO_INCREMENT,
`capacity` float DEFAULT NULL,
 PRIMARY KEY (`id_capacity`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=11 ; 

INSERT INTO `capacity` (`id_capacity`, `capacity`) VALUES
(1, NULL),
(6, 1.2),
(7, 1.3),
(8, 1.5),
(9, 2),
(10, 2.5);

2 个答案:

答案 0 :(得分:2)

您的问题不是您的代码,而是您的PC(和所有其他个人计算机)保存浮动值的方式。它将值保存为1.2,它以简单的方式将其保存为“。”之前的部分。 (在你的情况下为1)然后它将值保存在'。'后面。

因此,1/2 + 1/4 + 1/8 + ......

所以0.2将是

  0*1/2 + 0*1/4 + 1*1/8(=0,125 so 0,75 are left) 
+ 1*1/16(=0,0625 so 0,0125 are left) + ... and so on

1/的数量有限,因此您永远无法达到0.2或0.3的完美值

我希望这会对你有所帮助。

答案 1 :(得分:0)

它显示在这里很好

<select name="capacity" tabindex="7">
    <option value="">Odaberi kapacitet</option>
    <option value="1">&nbsp;&nbsp;</option>
    <option value="6">1.2&nbsp;&nbsp;</option>
    <option value="7">1.3&nbsp;&nbsp;</option>
    <option value="8">1.5&nbsp;&nbsp;</option>
    <option value="9">2&nbsp;&nbsp;</option>
    <option value="10">2.5&nbsp;&nbsp;</option>
</select>