我的查询就是这样,
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)
答案 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。谢谢你的时间。