【问题标题】:Large scale decimal computation in SQLSQL 中的大规模十进制计算
【发布时间】:2019-03-15 06:15:35
【问题描述】:

我遇到了一些在 SQL Server 2016 Enterprise 中执行的数学运算。

我需要计算这个表达式:

(4.384 / 4.2989 * 100) * 98.8251017928029 / 100

在 SQL 中我得到结果 100.78141988869389772850690000

但是当我在 MS Excel 中计算这个表达式时,我得到:100.7814199585120000

由于这些结果是消费者价格指数,因此小数点后的数字很重要。

那么,我的问题是,哪个结果是正确的? SQL Server 或 Excel。

PS。我已经更新了我的问题。 这里是dbfiddle

谢谢。

【问题讨论】:

  • 由于浮点计算,Excel 有 15 位有效数字限制。互联网上有很多内容可供阅读。
  • 那么,如果我将所有小数转换为浮点数,我应该会收到与 Excel 中相同的结果吗?
  • 要在 MS SQL 中锁定 15 位有效数字的结果,您可能应该使用 Decimal 或 Numeric 来指定精度和小数位数。
  • 众所周知,SQL Server 中的 FLOAT 容易出现舍入错误 - 如果您想要精确计算,请改用 DECIMAL(p,s)
  • 我有,我在我的sql表达式中使用小数,但结果与excel不同。

标签: sql sql-server excel decimal sql-server-2016


【解决方案1】:

我在这里发现了同样的问题:Wrong calculation in SQL-Server 我也试过用java计算,结果显示excel的结果更准确。 使用 sql 计算时应使用小数。

【讨论】:

  • float 数据类型。如文档中所述,它是Approximate-number data types。顺便说一句,这不是问题的答案
【解决方案2】:

实际上,我在创建 DbFiddle 时发现了演员表错误。因此,当错误被修复时,现在的结果几乎与 excel 中的结果相同。结果差异很小,但差异在我的规模需求背后

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    相关资源
    最近更新 更多