gpt4 book ai didi

Mysql where 子句比较对于相同值的 double 和 float 数据类型给出不同的结果

转载 作者:行者123 更新时间:2023-11-29 10:18:11 24 4
gpt4 key购买 nike

我的mysql版本是5.7.14

我有 1 个包含两列的表格

1).带有 float 据类型的price_val_float

2).带有 double 据类型的price_val_double

表格结构

CREATE TABLE test (
price_val_float FLOAT(6,2),
price_val_double DOUBLE(6,2)
);

两列中的值相同

INSERT INTO test VALUES
(78.59, 78.59),
(78.60, 78.60),
(78.61, 78.61);

现在我设置一个变量如下

SET @priceValue=78.6;

现在我想从测试表中获取所有记录,其中price_val_float >= @priceValue;

SELECT price_val_float FROM test WHERE price_val_float>= @priceValue;

以上查询仅返回78.61

但是如果我对 price_val_double 列运行相同的查询

SELECT price_val_double FROM test WHERE price_val_double>= @priceValue; 

本次返回

78.60

78.61

我不明白为什么mysql返回不同的结果,因为只有数据类型不同

有人知道这个吗?

这里是Fiddle用于测试

提前致谢。

最佳答案

这可能听起来很奇怪,但这是因为十进制数是近似值。由于存储大量数字的性质,这是所有编程中的一个问题。甚至 mysql 文档也称这些“近似”值: https://dev.mysql.com/doc/refman/5.5/en/floating-point-types.html

例如:MySQL 在存储值时会进行舍入,因此如果将 999.00009 插入 FLOAT(7,4) 列,则近似结果为 999.0001。

mysql 文档对此进行了解释: https://dev.mysql.com/doc/refman/5.5/en/problems-with-float.html

或者作为这里用 Python 解释的附加案例: https://docs.python.org/2/tutorial/floatingpoint.html

解决这个问题的方法是确定所需的精度并将该值存储为整数。

关于Mysql where 子句比较对于相同值的 double 和 float 数据类型给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49789231/

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