2014-09-10 3 views
1

Я получил это: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 до ближайшей минуты.

Благодаря

+0

Если вы хотите «ближайший», вероятно, вам нужно 'round' вместо' потолок ", но в любом случае вам необходимо остановить целочисленное деление. –

ответ

4

Оба операнда в @billsec/60 представляют собой целые числа, так что результат всегда усеченное первое (целочисленное деление).

Чтобы сохранить десятичную часть, вам нужно сделать один или оба десятичных числа или поплавка. В противном случае CEILING всегда будет no-op, поскольку вы всегда передаете ему точное целое число.

Замена соответствующей части кода с ниже будет решить эту

CEILING(@billsec/60.0) 
2

бросание как поплавок ...

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