正在四舍五入计算 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
格式化为 varchar
、decimal
和 float
,但没有成功。我也尝试将 N 和 D 的格式更改为 varchar
、decimal
和 float
。我尝试将等式从 (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)
会做的。
我正在尝试计算一些性能指标,如 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
格式化为 varchar
、decimal
和 float
,但没有成功。我也尝试将 N 和 D 的格式更改为 varchar
、decimal
和 float
。我尝试将等式从 (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)
会做的。