Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询-看起来很奇怪的行为。这与浮点值有关吗?_Mysql_Database - Fatal编程技术网

MySQL查询-看起来很奇怪的行为。这与浮点值有关吗?

MySQL查询-看起来很奇怪的行为。这与浮点值有关吗?,mysql,database,Mysql,Database,我有一个名为sellerparams的表,其中有许多列,其中一列名为probabilityinc。此列的类型为float 我不明白为什么第二个查询没有像我预期的那样工作 第一次查询和结果 mysql> select id,probabilityinc from temp.sellerparams; +----+----------------+ | id | probabilityinc | +----+----------------+ | 1 | 0.3 | |

我有一个名为
sellerparams
的表,其中有许多列,其中一列名为
probabilityinc
。此列的类型为
float

我不明白为什么第二个查询没有像我预期的那样工作

第一次查询和结果

mysql> select id,probabilityinc from temp.sellerparams;
+----+----------------+
| id | probabilityinc |
+----+----------------+
|  1 |            0.3 |
|  2 |            0.3 |
|  3 |            0.3 |
|  4 |            0.4 |
+----+----------------+
4 rows in set (0.01 sec)
第二次查询和结果(意外?

如您所见,有一行的概率为
probabilityinc=0.4
。为什么第二个select返回空?这是否与浮点值的内部表示有关?如果是这样,我如何根据float类型的列进行选择


谢谢。

对列使用更精确的数据类型可能更好,因为浮点的精度相当有限。也就是说,比较浮点值时始终使用公差值是一种良好的做法

select id from temp.sellerparams 
where probabilityinc between (0.4 - epsilon) AND (0.4 + epsilon); 

其中ε表示公差,例如0.0001

您应该将列类型更改为
数值<代码>浮动
设计不准确。而像0.4这样的数字可能略有不同。这就是为什么如果数字存储为
0.399999

例如,您可以使用
数值(10,5)


我不知道这件事。。谢谢分享。谢谢。这很有效。十进制(10,5)和数字(10,5)之间有什么区别吗。文档中说“在MySQL中,数字是以十进制实现的……”,所以我想不是。但如果知道它们是否完全相同,那就太好了。
select id from temp.sellerparams 
where probabilityinc between (0.4 - epsilon) AND (0.4 + epsilon);