首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实数类型的MySQL SUM可能返回不一致的结果

问实数类型的MySQL SUM可能返回不一致的结果
EN

Stack Overflow用户
提问于 2014-12-05 03:33:08
回答 1查看 299关注 0票数 4

对于具有较大实数值的列,MySQL将返回0作为它们的和,但如果包装在子选择中,则将返回非零结果。我知道通常溢出情况是未定义的,但对我来说,MySQL会根据查询是简单的还是包含子选择返回不同的结果,这对我来说似乎很奇怪。

代码语言:javascript
复制
create table z (f_real real);
insert into z values (1.80309068027e307),(1.44090607633e308),(1.59586958712e308);
select sum(f_real) from z;
+-------------+
| sum(f_real) |
+-------------+
|           0 |
+-------------+
select * from (select sum(f_real) from z) t;
+------------------------+
| sum(f_real)            |
+------------------------+
| 1.7976931348623157e308 |
+------------------------+
EN

回答 1

Stack Overflow用户

发布于 2014-12-11 09:30:00

好的,我认为这与SUM所能处理的数字达到上限有关。

例如:插入z值(1.80309068027e307)、(1.44090607633e307)、(1.59586958712e307);

工作正常。

插入z值(1.80309068027e308)、(1.44090607633e307)、(1.59586958712e307);

不起作用,因为1.80309068027e308是非法的双精度。我猜是因为它太大了。

所以,似乎如果你把所有低于双倍上限的数字相加,但结果是高于该上限的两倍,那么它将报告0,而不是返回错误?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27302455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档