下面的代码显示了一个包含数据库条目的选择框。
问题是数据库中的值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']." </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);
你的问题不是你的代码,而是你的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
这里显示得很好
<select name="capacity" tabindex="7">
<option value="">Odaberi kapacitet</option>
<option value="1"> </option>
<option value="6">1.2 </option>
<option value="7">1.3 </option>
<option value="8">1.5 </option>
<option value="9">2 </option>
<option value="10">2.5 </option>
</select>