$query2 = mysqli_query($con, "SELECT * FROM third WHERE id2=$id2 AND divid=3.0");
这是我的SQL命令,它运行良好。但是如果我想使用divid=3.1
(这里有一些浮点数)的instad 3.0,那么mysqli_num_rows
会返回0.而且我完全相信我的数据库中有很多divid=3.1
列。
`$query2 = mysqli_query($con, "SELECT * FROM third WHERE id2=20 AND divid=3.1");` //this givs me mysqli_num_rows == 0;
在SQL命令中使用float-type有什么不同吗?
答案 0 :(得分:2)
与FLOAT
的区别在于它是一个近似值。我刚刚创建了一个值为3
和3.1
的表,当我尝试查询WHERE divid = 3.1
时,我也没有得到任何行。我假设这是因为3.1最终会像3.1000000000000001或3.0999999999999999那样。
您的选择是:
更改您的表格,以便divid
列为DECIMAL
类型。
在divid
子句中使用DECIMAL
时,将WHERE
投放到SELECT * FROM third WHERE id2=20 AND CAST(divid AS DECIMAL(10,1))=3.1
:
divid
查询时回合SELECT * FROM third WHERE id2=20 AND ROUND(divid, 1) = 3.1
:
{{1}}
如果在项目中更改列类型还不太晚,我建议使用第一个选项。
答案 1 :(得分:0)
FLOAT
和DOUBLE PRECISION
数据类型具有设计的舍入行为。您不能指望它们表现得像精确的数值。见http://dev.mysql.com/doc/refman/5.6/en/problems-with-float.html
您应该使用DECIMAL
(或其同义词NUMERIC
)代替。
我去年发了推文:https://twitter.com/billkarwin/status/347561901460447232
如果我每次看到有人使用FLOAT存储货币时都有一分钱, 我有$ 999.997634。 #ieee754jokes