为什么SET @H1 = CAST((@rCount / @poolTot) AS VARCHAR(50)) + '%'
不断返回0%
?
@ H1是VARCHAR(50),而@rCount和@poolTot是值为8和10的整数。我应该得到类似.80%的内容
感谢您的帮助
答案 0 :(得分:0)
如果您想以十进制转换结果,可以执行类似
的操作Declare @rCount as int=8;
declare @poolTot as int =10
select CAST((CONVERT(DECIMAL(10,2), @rCount)) /
(CONVERT(DECIMAL(10,2), @poolTot))as varchar(50)) + '%'
输出就像
再次,如果您只想要小数点后两位数,则可以执行类似
的操作Declare @rCount as int=8;
declare @poolTot as int =10
declare @Temp as decimal(10,2)=(CONVERT(DECIMAL(10,2), @rCount)) /
(CONVERT(DECIMAL(10,2), @poolTot))
select convert(varchar(10),@Temp,2) + '%'
比显示
答案 1 :(得分:0)
您的被除数或除数(或两者)需要是带小数位的数据类型(十进制,浮点数等)。这样做的一种方法是将其中一个数字乘以1.0,以强制转换。或者您可以进行显式转换。
您的结果可能会有所不同,具体取决于您选择的数据类型。使用下面的第一种方法,您将获得“0.80000000000000%”。如果你把@ castTot转换为浮点数,就像第二个例子一样,你将获得“0.8%”。这实际上取决于您希望结果的样子。
DECLARE @H1 VARCHAR(50)
,@rCount INT = 8
,@poolTot INT = 10
SET @H1 = CAST(((@rCount)/ (@poolTot * 1.0)) AS VARCHAR(50)) + '%'
SELECT @H1
_
DECLARE @H1 VARCHAR(50)
,@rCount INT = 8
,@poolTot INT = 10
SET @H1 = CAST(((@rCount)/ cast(@poolTot as float)) AS VARCHAR(50)) + '%'
SELECT @H1
答案 2 :(得分:0)
我认为你可以使用它:
SET @H1 = CAST((100 * @rCount / @poolTot) AS VARCHAR(50)) + '%'