gpt4 book ai didi

mysql - 在 MySQL 中添加带小数的数字返回四舍五入的数字

转载 作者:行者123 更新时间:2023-11-29 05:29:12 26 4
gpt4 key购买 nike

我有一个包含三列的表格:

来源/目标/权重

x/y/0.2

x/y/0.2

z/a/0.5

“权重”列为“ float ”。我正在运行一个选择以将所有重复项分组并将“权重”分数加在一起。这是查询:

SELECT source, target, sum(weight) as weight2
FROM mytable
GROUP BY source, target

奇怪的是,在我运行查询后,似乎“权重”部分中任何低于 1 的值(例如 0.2)都四舍五入为 1。所以我得到下表:

来源/目标/权重

x/y/2

z/a/1

分数应该是 0.4 和 0.5。我做错了什么?

最佳答案

我刚刚在我的 MySQL 5.5.30 实例上运行了这个:

mysql> create table mytable (source char(1), target char(1), weight float);

mysql> insert into mytable values
-> ('x','y',0.2),
-> ('x','y',0.2),
-> ('z','a',0.5);

mysql> SELECT source, target, sum(weight) as weight2
-> FROM mytable
-> GROUP BY source, target;
+--------+--------+--------------------+
| source | target | weight2 |
+--------+--------+--------------------+
| x | y | 0.4000000059604645 |
| z | a | 0.5 |
+--------+--------+--------------------+

MySQL 不会像您描述的那样四舍五入到 1。我只能猜测您在插入值时将它们四舍五入。我建议在不执行 SUM() 或 GROUP BY 的情况下仔细检查数据,以查看值是什么。

您可能会注意到,在我上面的输出中,第一行的 SUM 并不完全是 0.4,而是一个接近 0.4 的浮点值。如果您担心舍入错误,您可能不应该使用 FLOAT。

阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic, by David Goldberg .
或者在 MySQL 手册中对这个问题的简短处理:Problems with Floating-Point Values .

关于mysql - 在 MySQL 中添加带小数的数字返回四舍五入的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16500690/

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