T-SQL / SQL 服务器:转换后舍入(十进制)SqlCommand

T-SQL / SQL Server : rounding after convert (decimal) SqlCommand

我想在添加到 datagridview 之前规范化我的 SQL 服务器列,我在 SQL 查询中完成了。但我有一个问题。

如果值完全除法(例如 100/100=1),我不想看到这个值像 1.00000000000000。如果该值不是完全除法(例如 3/7=0.42857142857),我想在四舍五入后将该值四舍五入为两位数 (0.43)。

这是我的代码:

string q = "SELECT column1, column2, ((CONVERT(DECIMAL(18, 2), column3) / (SELECT MAX(column3) FROM tablename)) * 100) AS normalizedColumn3 
            FROM tablename .......;

我需要对第 3 列进行归一化,它在归一化之前的值在 1 - 2000000 之间。在归一化之后,值将在 0.01 - 100 之间。

归一化公式:

column 3 = ((column 3 / maximum column 3) * 100)

感谢您的回答...

我相信您可以使用 ROUND ( numeric_expression , length [ ,function ] )SELECT ROUND(CAST (# AS decimal (#,#)),#); 来四舍五入您的小数点。

这里有更多信息:https://docs.microsoft.com/en-us/sql/t-sql/functions/round-transact-sql?view=sql-server-2017

如果您只需要两位小数,就会出现数据丢失的小问题。 1 到 2,000,000

之间的值至少需要 5 位小数

例子

Declare @YourTable table (Col3 float)
Insert into @YourTable values 
 (1),(1536),(1000000),(2000000)

Select A.*
      ,NewVal = convert(decimal(10,2), (Col3*100.0) /  ( Select max(Col3) from @YourTable)  )
 From  @YourTable A

Returns

Col3     NewVal
1        0.00     -- At decimal(10,5) you would see 0.00005
1536     0.08
1000000  50.00
2000000  100.00