gpt4 book ai didi

MySQL浮点值查询问题

转载 作者:行者123 更新时间:2023-11-29 13:08:08 27 4
gpt4 key购买 nike

我对表中的浮点值有一个相当奇怪的问题。在我的 PRODUCT 表中,我有一个 MIN_QUANTITY 字段,其中包含 0、0.01、0.25 和 1 作为值。我想知道有多少行的 MIN_QUANTITY 字段为 0.01,因此我使用了以下查询:

SELECT COUNT(*) FROM PRODUCT WHERE MIN_QUANTITY = 0.01;

查询返回 0。这显然是错误的,因为该字段中大约有 1,200 个 0.01 的实例。所以我尝试了:

SELECT COUNT(*) FROM PRODUCT WHERE MIN_QUANTITY = 0.25;

此查询正确返回 2,105,这是正确的计数。

我一直在读到 MySQL 有时会用浮点值做一些有趣的事情,但肯定对字段中未计算的值进行直接计数应该返回正确的数字 - 或者我做错了什么?

预先感谢您的任何建议!

最佳答案

您已经发现为什么 float 不适合存储精确数量。请改用十进制。这是一个定点表示。

如果您无法更改表中的数据类型,请添加容差并使用 Between:

SELECT COUNT(*)
FROM PRODUCT
WHERE MIN_QUANTITY between 0.1 - 0.0001 and 0.25 + 0.0001;

通过此公式,您仍然可以在 MIN_QUANTITY 上使用索引。如果你要做这样的事情:

SELECT COUNT(*)
FROM PRODUCT
WHERE cast(MIN_QUANTITY as decimal(10, 2)) = 0.1;

那么您将失去利用索引的能力。

关于MySQL浮点值查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22425331/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com