【问题标题】:Calculations being being rounded SQL Server 2012 [duplicate]正在四舍五入的计算 SQL Server 2012 [重复]
【发布时间】:2015-09-12 13:54:12
【问题描述】:

我正在尝试在 SQL 中将一些性能指标计算为 [RATE],但无论我做什么,我都只能得到整数值作为回报。

在我的数据集中,我有一个分子和一个分母,它们都存储为整数,它们被分解为组和子集。根据组和子集,计算速率略有不同。对于第 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,但仍然没有效果。

我错过了什么/做错了什么?

【问题讨论】:

    标签: calculated-columns decimalformat rounding-error


    【解决方案1】:

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

    试试这个:

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

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

    如果您想对计算值进行四舍五入,则需要使用 SQL 中的ROUND 函数。

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

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

    【讨论】:

      【解决方案2】:

      你需要使用 CAST:

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

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        SELECT (n * 1000.0) 会做到的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-19
          • 2021-12-12
          • 2014-10-29
          • 1970-01-01
          • 2019-07-02
          • 1970-01-01
          • 2022-01-09
          • 2023-01-12
          相关资源
          最近更新 更多