正在四舍五入计算 SQL Server 2012

Calculations being being rounded SQL Server 2012

我正在尝试计算一些性能指标,如 SQL 中的 [RATE],但无论我做什么,我都只能在 return 中获得整数值。

在我的数据集中,我有一个分子和一个分母,它们都存储为分解为组和子集的整数。根据组和子集,比率的计算略有不同。对于第 1 组,计算只是 N/D。对于第 2 组,计算为 (N*1000)/D,但 1 个子集除外,其计算为 (N*10000)/D。

我将查询写为:

SELECT [Group]
      ,[SubSet]
      ,[Numerator] N
      ,[Denominator] D
      ,CASE WHEN D=0 Then NULL
        WHEN [Group]='G1' THEN [N]/[D]
        WHEN [SubSet]='S2' THEN ([N]*10000)/[D]
        WHEN [SubSet] NOT LIKE 'S2%' AND [G] NOT LIKE 'G1%' THEN ([N]*1000)/[D] as [RATE]

无论我做什么,结果变量都是整数。我尝试将 RATE 格式化为 varchardecimalfloat,但没有成功。我也尝试将 N 和 D 的格式更改为 varchardecimalfloat。我尝试将等式从 (N*1000)/D 更改为 (N/D)*1000 但仍然没有效果。

我missing/doing哪里错了?

您需要使用 CAST:

CAST ((N*1000) AS FLOAT) / D

希望对您有所帮助。

您遇到的问题是因为 SQL 正在进行整数除法,这只会 return 个整数。要获得小数 return 值,您必须至少有一个小数值。

试试这个:

(CAST([N] as decimal(12,6))/[D]) * 1000

根据您期望的精度调整 decimal(12,6)12,6将return一个小数点后6位的小数。如果您只想要 2 位小数,请使用 16,2.

如果您随后想要舍入计算值,则需要使用 SQL 中的 ROUND 函数。

四舍五入到小数点后第二位:

ROUND((CAST([N] as decimal(12,6))/[D]) * 1000, 2)

SELECT (n * 1000.0) 会做的。