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);