将小数转换为整数

时间:2014-01-24 20:05:05

标签: sql-server

如何安全地转换以下内容:

ISNULL(t1.UserPercentage,0) AS UserPercentage

当前t1.UserPecentage列是小数(9,2),我想将其转换为整数。

由于该值可以为NULL,因此应根据对ISNULL的调用结果进行转换吗?

3 个答案:

答案 0 :(得分:2)

DECLARE @Var DECIMAL(9,2) = 2.67

SELECT CAST(ROUND(@Var,0) AS INT)

此查询将保留空值但是如果要将NULLS转换为0

THEN

SELECT CAST(ROUND(ISNULL(@Var, 0),0) AS INT)

注意

  

将DECIMAL转换为int而不使用ROUND,它会减少一些   如果你在将其转换为零之前将其圆整为零,那么结果是准确的   INT。

     

直接转换为INT只会截断任何小数,但是如果   你把它变成零第一个然后CAST作为int,它会给你更多   现实的结果。

示例

DECLARE @Var DECIMAL(9,2) = 2.67
SELECT CAST(@Var AS INT)

这将返回2,但基本的数学规则表示如果将其四舍五入为整数,则该值为3。

DECLARE @Var DECIMAL(9,2) = 2.67
SELECT CAST(ROUND(@Var,0) AS INT)

此查询将返回3.更准确,然后将其转换为INT。

答案 1 :(得分:1)

如果您想要的结果是小数点的简单截断,使用FLOOR是您的最佳选择。乍一看,对于其他人来说,你要做的事情会更明显。

ISNULL(FLOOR(t1.UserPercentage), 0) AS UserPercentage

示例:

SELECT FLOOR(1.1), FLOOR(1.9)
-- Result is a simple truncation of the decimal points. (=1)

答案 2 :(得分:0)

declare @val decimal(9,2) =43.44
select convert(int, @val)

select cast(@val as int)