我如何得到一个int

时间:2014-06-16 15:50:01

标签: sql math

似乎是一个简单的问题...但我很难过。

    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,但我的选择是零?

我做错了什么?

6 个答案:

答案 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进行整数除法。

您有两种方法可以获得正确的结果:

  1. 首先将Ttotal_User乘以100,然后除以@Total:

    set @Number = (@Total_User * 100) / @Total
    
  2. 在进行除法之前,将@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