mySQL返回空,即使它不应该?

Kaa*_*are 0 mysql

我是一个总的mySQL新手,但我不知道如何寻找答案,所以这就是我把它带到这里的原因:

            DESCRIBE rParam;
            +----------------+---------------+------+-----+---------+-------+
            | Field          | Type          | Null | Key | Default | Extra |
            +----------------+---------------+------+-----+---------+-------+
            | p              | float         | YES  |     | NULL    |       |
            | d              | float         | YES  |     | NULL    |       |
            | LTP            | float         | YES  |     | NULL    |       |
            | LTD            | float         | YES  |     | NULL    |       |
            | alpha          | float         | YES  |     | NULL    |       |
            | N              | smallint(6)   | YES  |     | NULL    |       |
            | g              | float         | YES  |     | NULL    |       |
            | a              | float         | YES  |     | NULL    |       |
            | seed           | float         | YES  |     | NULL    |       |
            | startingWeight | float         | YES  |     | NULL    |       |
            | path           | varchar(1000) | YES  | UNI | NULL    |       |
            | type           | varchar(100)  | YES  |     | NULL    |       |
            +----------------+---------------+------+-----+---------+-------+
            12 rows in set (0.00 sec)


            SELECT p FROM rParam GROUP BY p;

            +--------+
            | p      |
            +--------+
            |      0 |
            |  0.001 |
            |  0.002 |
            |  0.003 |
            |  0.004 |
            |  0.005 |
            | 0.0075 |
            |  0.008 |
            |   0.01 |
            |  0.012 |
            | 0.0125 |
            |  0.014 |
            |  0.015 |
            |   0.02 |
            |  0.025 |
            |   0.03 |
            |  0.035 |
            |   0.04 |
            |   0.05 |
            |    0.1 |
            |    0.2 |
            |    0.3 |
            |    0.4 |
            |    0.5 |
            |    0.6 |
            |    0.7 |
            +--------+
            26 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

我可以获得一种查询的结果:

            SELECT p FROM rParam WHERE p=0.5 GROUP BY p;
            +------+
            | p    |
            +------+
            |  0.5 |
            +------+
            1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

但是,改变我要求的p值:

            SELECT p FROM rParam WHERE p=0.6 GROUP BY p;
            Empty set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

但我们可以从第一个输出中清楚地看到有哪些行p = 0.6?这是大多数p值的问题 - 为什么mySQL返回空集?

kni*_*ttl 5

这听起来像一个舍入错误.浮点数不能总是以二进制形式精确表示.尝试应用一些epsilon:

SELECT DISTINCT p
FROM rParam
WHERE ABS(p - 0.6) < 0.00001
Run Code Online (Sandbox Code Playgroud)

如果您需要精确的小数,请使用DECIMAL而不是FLOAT列数据类型.

PS.可能更好地使用SELECT DISTINCT而不是GROUP BY.