在SQL命令中使用float-type值

时间:2014-05-26 20:29:12

标签: mysql sql database floating-point

$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有什么不同吗?

2 个答案:

答案 0 :(得分:2)

FLOAT的区别在于它是一个近似值。我刚刚创建了一个值为33.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)

FLOATDOUBLE 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