首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在MySQL中这个结果不同于Excel或Calc?

问为什么在MySQL中这个结果不同于Excel或Calc?
EN

Database Administration用户
提问于 2016-10-07 02:49:36
回答 2查看 565关注 0票数 0

我很困惑,因为这个计算给出了不同的结果。

代码语言:javascript
复制
Select (10/110*48576000)

结果是: 4415999.9558

但是,如果我在Excel中使用= 10/110*48576000进行操作,则结果是4416000。即使你在加州计算它,10除以110,乘以48576000,结果是4416000。

有人能解释一下我这种奇怪的行为吗?

注意,我在Windows 2008中使用MySQL5.5.46。

EN

回答 2

Database Administration用户

发布于 2016-10-07 11:17:50

这是由于MySQL将计算转换为浮动,这充其量是一个数字的近似。如果您舍入该解决方案,则4415999.9558四舍五入到0小数位是4416000。

在MS中,计算结果为0,因为结果是整数,步骤如下

代码语言:javascript
复制
10 /110 = 0
0 * 48576000 = 0

然而,

代码语言:javascript
复制
Select 1.0 * 10 /110 *48576000
4415995.584000

如果您对数据类型非常明确,则得到正确的答案,即

代码语言:javascript
复制
declare @a  decimal(18,10) = 10;
declare @b  decimal(18,10) = 110;
declare @c  decimal(18,10) = 48576000;
select @a /@b *@c
4416000.00000000000
票数 2
EN

Database Administration用户

发布于 2016-10-08 04:34:52

MySQL数据类型的FLOAT只有大约7位的精确性。这就是你的精准度。DOUBLE大约有16。DECIMAL有可变的精度,但是当涉及到除法时,可能会有一些奇怪的规则。

Excel使用与MySQL不同的规则集。

底线:当使用大量数字和/或使用除法或超越函数时,不要期望得到“正确”的答案。

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

https://dba.stackexchange.com/questions/151648

复制
相关文章

相似问题

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