Sql server SQL Server舍入(上限)

Sql server SQL Server舍入(上限),sql-server,Sql Server,我有这个: DECLARE @billsec as int SET @billsec = 67 DECLARE @_cost as money SET @_cost = 0.1 + (CEILING((@billsec / 60)) * 0.015) print @_cost 它返回0.12,但我预期为0.13,因为我正在尝试将@billsec四舍五入到最近的一分钟 谢谢在@billsec/60中,两个操作数都是整数,因此结果总是先被截断(整数除法) 您需要设置一个或两个十进制或浮点以保

我有这个:

DECLARE @billsec as int
SET @billsec = 67

DECLARE @_cost as money
SET @_cost = 0.1 + (CEILING((@billsec / 60)) * 0.015) 

print @_cost
它返回0.12,但我预期为0.13,因为我正在尝试将
@billsec
四舍五入到最近的一分钟


谢谢

@billsec/60
中,两个操作数都是整数,因此结果总是先被截断(整数除法)

您需要设置一个或两个十进制或浮点以保留小数部分。否则
CEILING
将始终为不可操作,因为您总是传递一个精确的整数

用以下代码替换代码的相关部分将解决此问题

CEILING(@billsec/60.0)

@billsec/60
中的两个操作数都是整数,因此结果总是先截断(整数除法)

您需要设置一个或两个十进制或浮点以保留小数部分。否则
CEILING
将始终为不可操作,因为您总是传递一个精确的整数

用以下代码替换代码的相关部分将解决此问题

CEILING(@billsec/60.0)
扮演浮子

    DECLARE @billsec as int
    SET @billsec = 67
    DECLARE @_cost as money
    SET @_cost = 0.1 + (CEILING((cast (@billsec as float) / 60)) * 0.015) 
    print @_cost
扮演浮子

    DECLARE @billsec as int
    SET @billsec = 67
    DECLARE @_cost as money
    SET @_cost = 0.1 + (CEILING((cast (@billsec as float) / 60)) * 0.015) 
    print @_cost
如果您想要“最近的”,您可能需要
取整
而不是
上限
,但无论哪种方式,您都需要停止整数除法。如果您想要“最近的”,您可能需要
取整
而不是
上限
,但无论哪种方式,您都需要停止整数除法。