【问题标题】:Cannot achieve a WHERE clause on a float value无法在浮点值上实现 WHERE 子句
【发布时间】:2015-06-26 11:59:32
【问题描述】:

我在表格中有一个 4.3 的浮点值。

发送请求时:

SELECT * FROM mytable WHERE floatfield = 4.3

返回一个空结果。

即使尝试;

SELECT * FROM mytable WHERE floatfield = '4.3'

有什么问题?

【问题讨论】:

标签: mysql floating-point where-clause


【解决方案1】:

Floating-point does not have infinite precision4.3 不能用有限的二进制数字精确表示。

【讨论】:

  • 二进制浮点数(世界上几乎每个计算机系统都使用)不能在有限的位数中精确地表示 4.3。
【解决方案2】:

使用 Column LIKE float 而不是 Column = float。不要了解这背后的术语,它可能只是从值的开头匹配或删除看不见的精度数字并将其视为 varchar。

【讨论】:

  • 答案在我的情况下有效,但欢迎对其工作原理的技术解释。
【解决方案3】:

您可以使用以下功能:

DELIMITER $$
DROP FUNCTION IF EXISTS `x_cast_to_float`$$
CREATE FUNCTION `x_cast_to_float`(number FLOAT) RETURNS FLOAT
    NO SQL
    BEGIN
        RETURN number;
    END$$
DELIMITER ;

SELECT * FROM mytable WHERE floatfield = x_cast_to_float(4.3)<br />

【讨论】:

    猜你喜欢
    • 2011-03-29
    • 2017-01-30
    • 1970-01-01
    • 2019-05-16
    • 2015-06-26
    • 2018-09-17
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多