似乎是一个简单的问题...但我很难过。
declare @Total_User int
set @Total_User = 8
declare @Total int
set @Total = 12
declare @Number int
set @Number = (@Total_User / @Total) * 100
select @Number as 'Standard'
我期待66,但我的选择是零?
我做错了什么?
答案 0 :(得分:1)
尝试: 设置@Number =(@ Total_User * 100 / @Total)
答案 1 :(得分:1)
您的部门@Total_User / @Total
正在使用整数算术 ,即。任何余数都将被丢弃,因此表达式的一部分将为0。
要修复,请写下(1.0 * @Total_User / @Total) * 100
。这将操作提升到浮点。
答案 2 :(得分:1)
您正在进行整数运算,这就是为什么您看到0
,至少将其中一个操作数设为float
,您将看到正确的结果,如:
declare @Total float
或者您可以将一个操作数转换为float
,如:
et @Number = (CAST(@Total_User as float) / @Total) * 100
您当前的代码正在执行:
8 / 12
哪会产生0.666666666667
,但由于您的两个操作数都属于int
类型,因此使用int
类型执行计算,从而导致0
而不是0.66666666667
{1}}。
答案 3 :(得分:1)
(@Total_User / @Total)
的结果为零,因为它正在进行整数除法。
您可以先加100,得到您期望的结果:
set @Number = 100 * @Total_User / @Total
要获得舍入值而不是截断,可以使用浮点值和round
函数:
set @Number = round(100.0 * @Total_User / @Total, 0)
这会得到结果67
而不是66
,因为它更接近实际结果66.6666666666
答案 4 :(得分:0)
你得0,因为你正在对@Total_User和@Total进行整数除法。
您有两种方法可以获得正确的结果:
首先将Ttotal_User乘以100,然后除以@Total:
set @Number = (@Total_User * 100) / @Total
在进行除法之前,将@Total_User和@Total转换为浮点数:
set @Number = (cast(@Total_User as float) / cast(@Total as float)) * 100
答案 5 :(得分:0)
声明@Total_User浮动, @Total float, @Number float
SET @Total_User = 8
SET @Total = 12
SET @Number = @Total_User / @Total * 100
select CAST(@Number AS INT) AS 'Standard'
这将给你66