【发布时间】:2014-07-18 03:48:58
【问题描述】:
这是我的公式。我把它放在一个 SQL Server 存储过程中:
DECLARE @Var01 float
SET @Var01 = 1164.83 * (1 - 3.3387306 * LOG(0.00459418151829729) + 1.426559 * POWER(LOG(0.00459418151829729),2)) / (1 - 3.4680733 * LOG(0.00459418151829729) + 1.8779192 * POWER(LOG(0.00459418151829729), 2) - 0.21223784 * POWER(LOG(0.00459418151829729), 3) - 0.0035814371 * POWER(LOG(0.00459418151829729), 4) - 0.90903163 * POWER(10, -4) * POWER(LOG(0.00459418151829729), 5)) - 459.67
结果是:214.630185149416
那我试着和excel比较一下,公式如下:
=1164.83 * (1 - 3.3387306 * LN(0.00459418151829729) + 1.426559 * (LN(0.00459418151829729)) ^ 2) / (1 - 3.4680733 * LN(0.00459418151829729) + 1.8779192 * (LN(0.00459418151829729)) ^ 2 - 0.21223784 * (LN(0.00459418151829729)) ^ 3 - 0.0035814371 * (LN(0.00459418151829729)) ^ 4 - 0.90903163 * 10 ^ -4 * (LN(0.00459418151829729)) ^ 5) - 459.67
结果是:211.981432072480
问题是,哪一个是正确的?任何的想法?计算有什么不同?
【问题讨论】:
-
LN 用于 Excel,LOG 用于 SQL。
-
您使用了大量的浮点数,有些是小数点后 17 位。您在浮点运算中失去了精度,如果不检查,我会说 SQL 和 Excel 提供的精度不同,这就是您得到差异的原因。
-
@All,那我该怎么办?
-
@nawazlj 请阅读 Excel 的
LN()和 Sql Server 的LOG()的文档。你会发现它们都是自然对数。 -
@Haminteu 哦,天哪,我想我会投给 SQL Server。默认情况下,IIRC
float表示float(53),比 Excel 精确得多。你也可以试试 Wolfram Alpha 看看你得到了什么,但由于大小限制,你必须将你的公式分成几个块。不过,我对此没有足够的信心来提供答案。希望其他人可以过来确认。
标签: sql excel sql-server-2008 math excel-2010