我很困惑,因为这个计算给出了不同的结果。
Select (10/110*48576000)结果是: 4415999.9558
但是,如果我在Excel中使用= 10/110*48576000进行操作,则结果是4416000。即使你在加州计算它,10除以110,乘以48576000,结果是4416000。
有人能解释一下我这种奇怪的行为吗?
注意,我在Windows 2008中使用MySQL5.5.46。
发布于 2016-10-07 11:17:50
这是由于MySQL将计算转换为浮动,这充其量是一个数字的近似。如果您舍入该解决方案,则4415999.9558四舍五入到0小数位是4416000。
在MS中,计算结果为0,因为结果是整数,步骤如下
10 /110 = 0
0 * 48576000 = 0然而,
Select 1.0 * 10 /110 *48576000
4415995.584000如果您对数据类型非常明确,则得到正确的答案,即
declare @a decimal(18,10) = 10;
declare @b decimal(18,10) = 110;
declare @c decimal(18,10) = 48576000;
select @a /@b *@c
4416000.00000000000发布于 2016-10-08 04:34:52
MySQL数据类型的FLOAT只有大约7位的精确性。这就是你的精准度。DOUBLE大约有16。DECIMAL有可变的精度,但是当涉及到除法时,可能会有一些奇怪的规则。
Excel使用与MySQL不同的规则集。
底线:当使用大量数字和/或使用除法或超越函数时,不要期望得到“正确”的答案。
https://dba.stackexchange.com/questions/151648
复制相似问题