如何截断SQL Server中的十进制值

时间:2014-04-02 21:33:10

标签: sql sql-server tsql sql-server-2008-r2

我的查询就是这样,

declare @Q numeric = 3960 
declare @S varchar(10) = 2.5
select @Q*(1+(convert(float,@S)/100))

基于@S值结果可能有n个小数位数,但我只需要从结果中删除小数部分而不管小数位数。我尝试了很多方法,但它并不适用于所有@Q@S组合。

SELECT
   ROUND(@Q * (1 + ((convert(float,@S)) / 100)),0,1)   ,
   ROUND(CAST (@Q*(1+(convert(float,@S)/100)) AS decimal (6,2)),1,0)

3 个答案:

答案 0 :(得分:0)

如果只有0作为参数的ROUND()函数呢?这会将值四舍五入到小数点后的位置。

declare @Q numeric = 3960 
declare @S varchar(10) = 2.554
select ROUND(@Q*(1+(convert(float,@S)/100)), 0)

如果你想简单地截断任何小数,只需使用FLOOR()函数。

declare @Q numeric = 3960 
declare @S varchar(10) = 2.554
select FLOOR(@Q*(1+(convert(float,@S)/100)))

答案 1 :(得分:0)

如果您只是想在@S中删除小数点右边的值,然后将该值乘以@Q:

DECLARE @Q NUMERIC = 3960
DECLARE @S VARCHAR(10) = 2.5

SELECT Floor(@Q * (CONVERT(FLOAT, @S))) 

编辑:正如M.Ali指出的那样,FLOOR()函数将删除任何小数而不改变小数点左边的值。

答案 2 :(得分:0)

我明白了。问题是Float数据类型。

declare @Q numeric = 3960 
declare @S varchar(10) = 2.5
select 
3960*(1+(convert(decimal(18,2),@S)/100)),
floor(@Q*(1+(convert(decimal(18,2),@S)/100)))

请参阅此链接http://msdn.microsoft.com/en-us/library/ms187912.aspx。谢谢你的时间。