【问题标题】:SUM(Column_Value) is giving a different value from calculatorSUM(Column_Value) 给出的值与计算器不同
【发布时间】:2018-05-01 14:40:01
【问题描述】:

以下是我的 sql 表中的列值。当我使用桌面计算器将它们相加时,总和为 0

但是在 sql 中,当我取 Item_Quantity 的总和时,我得到一个奇怪的值,如下所示

此列的数据类型是浮点数。我能得到一些帮助吗?谢谢。

【问题讨论】:

  • 这是一个浮点值,接近0。
  • 如果您想使用精确的十进制数据,那么您选择了错误的数据类型来表示它。由于 float 不能精确地表示所有 十进制 值,因此您所展示的结果并不意外。
  • 如果您需要精确的结果,基本上可以将列类型更改为十进制。但请记住,十进制计算通常比浮点数慢。我建议阅读:stackoverflow.com/questions/1056323/…
  • 浮点数在内部表示为二进制数。例如。 0.2 是二进制的0.00110011001100110011...,具有无限次重复的0011,当然,必须在计算机中截断。因此,您看到的小错误。见:Decimal to Binary converter

标签: sql sql-server


【解决方案1】:

不知道你为什么说使用DECIMAL(18,1) 不起作用

这是您的示例数据

DECLARE @t TABLE ( Item_Quanity FLOAT)
INSERT INTO @t
(
    Item_Quanity
)
VALUES
(12.8) ,(-6.8) ,(1.4) ,(0.2) ,(3.4) ,(-2.8), (12) ,(-3.6) ,(-16.6) 

这是您的查询

SELECT SUM(Item_Quanity) FROM @t

给出这个结果

(No column name)
-3.5527136788005E-15

这是使用CAST对该查询进行的修改

SELECT SUM(CAST(Item_Quanity AS DECIMAL(18,1))) FROM @t

这给出了这个结果

(No column name)
0.0

现在将数据类型从 FLOAT 更改为 `DECIMAL(18,1)

DECLARE @t1 TABLE ( Item_Quanity DECIMAL(18,1))
INSERT INTO @t1
(
    Item_Quanity
)
VALUES
(12.8) ,(-6.8) ,(1.4) ,(0.2) ,(3.4) ,(-2.8), (12) ,(-3.6) ,(-16.6) 

SELECT SUM(Item_Quanity)
FROM @t1

返回

(No column name)
0.0

【讨论】:

  • 谢谢,这行得通。我再次恢复了数据库并检查了它,它现在可以工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 2015-06-17
  • 2021-12-25
  • 1970-01-01
相关资源
最近更新 更多