Mysql 在SQL命令中使用浮点类型值

Mysql 在SQL命令中使用浮点类型值,mysql,sql,database,floating-point,Mysql,Sql,Database,Floating Point,这是我的SQL命令,它运行良好。但是如果我不想在这里使用divid=3.1,那么3.0的instad中的一些float将返回0。我完全确定我的数据库中有许多divid=3.1列 $query2 = mysqli_query($con, "SELECT * FROM third WHERE id2=$id2 AND divid=3.0"); 在SQL命令中使用浮点类型有什么不同吗?浮点和双精度数据类型在设计上有舍入行为。你不能期望它们表现得像精确的数值。看 您应该改用十进制或其同义词NUMERI

这是我的SQL命令,它运行良好。但是如果我不想在这里使用divid=3.1,那么3.0的instad中的一些float将返回0。我完全确定我的数据库中有许多divid=3.1列

$query2 = mysqli_query($con, "SELECT * FROM third WHERE id2=$id2 AND divid=3.0");
在SQL命令中使用浮点类型有什么不同吗?

浮点和双精度数据类型在设计上有舍入行为。你不能期望它们表现得像精确的数值。看

您应该改用十进制或其同义词NUMERIC

去年我在推特上提到了这一点:

如果每次我看到有人用浮子储存货币时我都有一角硬币, 我要999.997634美元。IEEE754笑话

与浮点不同的是,它是一个近似值。我刚刚创建了一个值为3和3.1的表,当我尝试查询divid=3.1的位置时,也没有返回任何行。我假设这是因为3.1的结果类似于3.10000000000001或3.099999999999

您的选择如下:

更改表格,使divid列为十进制类型

在WHERE子句中使用divid时,将其强制转换为十进制:

从第三个选项中选择*,其中id2=20,CASTdivid为小数10,1=3.1

查询时取整divid:

从第三个选项中选择*,其中id2=20,ROUNDdivid为1=3.1


如果在项目中更改列类型还不算太晚,我建议使用第一个选项。

使用mysqli时,您应该使用参数化查询,并将用户数据添加到查询中。不要使用字符串插值来实现这一点,因为您将创建严重错误。我将其更改为十进制,但我的浮点数将变为整数。3.1->3我需要数据库中的浮动点。为小数列指定一个刻度,例如小数9,2允许小数点右边有两位数字。阅读这里的数据类型:我把它改为十进制,但我的浮点数变成了整数。3.1->3我需要数据库中的浮动点。使用“十进制”列时,需要指定长度和小数位数。i、 e.10,4为小数点后4位,共10位。手册:
`$query2 = mysqli_query($con, "SELECT * FROM third WHERE id2=20 AND divid=3.1");` //this givs me mysqli_num_rows == 0;