MySQL浮点比较问题

我在MySQL数据库架构中引入浮点列时遇到了一个问题,即对浮点值的比较不会总是返回正确的结果。

1-50.12

2-34.57

3-12.75

4-…(其余均小于12.00)

SELECT COUNT(*) FROM `users` WHERE `points` > "12.75"

这将返回“ 3”。

我已经读过,在MySQL中比较浮点值是一个坏主意,十进制类型是更好的选择。

我是否有希望继续使用float类型,并使比较正常工作?

回答:

您是否注意到以下问题?

CREATE TABLE a (num float);

INSERT INTO a VALUES (50.12);

INSERT INTO a VALUES (34.57);

INSERT INTO a VALUES (12.75);

INSERT INTO a VALUES (11.22);

INSERT INTO a VALUES (10.46);

INSERT INTO a VALUES (9.35);

INSERT INTO a VALUES (8.55);

INSERT INTO a VALUES (7.23);

INSERT INTO a VALUES (6.53);

INSERT INTO a VALUES (5.15);

INSERT INTO a VALUES (4.01);

SELECT SUM(num) FROM a;

+-----------------+

| SUM(num) |

+-----------------+

| 159.94000005722 |

+-----------------+

0.00000005722在某些行之间有一个额外的差异。因此,这些值中的一些与其初始化时的值相比将返回false。

为避免浮点算术和比较出现问题,应使用DECIMAL数据类型:

ALTER TABLE a MODIFY num DECIMAL(6,2);

SELECT SUM(num) FROM a;

+----------+

| SUM(num) |

+----------+

| 159.94 |

+----------+

1 row in set (0.00 sec)

以上是 MySQL浮点比较问题 的全部内容, 来源链接: utcz.com/qa/397283.html

回到顶部