2015-10-09 81 views
1

下面是显示数据库条目的选择框的代码。
来自数据库的浮点值不能正确显示php

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


我将不胜感激任何帮助。

<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); 
+1

可以在'float'类型更改为'DECIMAL(2,50)'? – jitendrapurohit

回答

2

你的问题不是你的代码是你的电脑(以及其他所有个人电脑)保存浮点值的方式。它将值不保存为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

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

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> 
相关问题