2015-08-20 2 views
0

У меня есть образец ввода 1.0950 с поплавковым типом.TSQL Round положительный и отрицательный

Делать это для положительных чисел является правильным, с 1.1 результате

declare @x float 
set @x = 1.0950 
select round(@x, 1) 

Но когда я изменяю @x отрицательных -1.0950 все еще округляется до -1.1 что неправильно он должен всегда округляет от нуля, поэтому ответ должно быть -1.09

Я бы предпочел не делать двух утверждений, один для положительных и один для отрицательных. Если бы кто-нибудь мог помочь, я был бы очень благодарен!

+1

Если он всегда должен округлять * прочь * от нуля, то, безусловно, '-1.1' является правильным ans wer, так как он больше от нуля до -1.09? –

+0

Извините, я забыл поставить дополнительную информацию. Когда минус -1.0950, он должен округлить до -1.09, но округляется, как есть .5. Согласно документации ROUND, если она положительна, округляется, если отрицательное значение округляется. Это не для меня. – Jjj

+0

Возможный дубликат [Почему Math.Round (2.5) возвращает 2 вместо 3 в C#?] (Http://stackoverflow.com/questions/977796/why-does-math-round2-5-return-2-instead -of-3-in-c) – Helio

ответ

0
declare @x float 
set @x = -1.0950 
select round(@x, 2) 
+0

Это верно для отрицательных чисел. Тогда, когда число положительное, результат равен 1,09, что неверно. – Jjj

+0

1.09 является правильным, когда вы раунд с 2 для положительного числа – Helio

+0

Будучи положительным, он должен быть 1,1, когда отрицательным оно должно быть -1.09. Это имеет смысл, когда вы делаете выставление счетов. Я могу сделать это с двумя заявлениями, но надеялся на одно. Спасибо хоть – Jjj

0

попробовать этот способ

declare @x float 
set @x = -1.0950 
select case when @x>0 then round(@x, 1)else ROUND(@x,2)end 
0

Попробуйте этот синтаксис вместо этого, он добавит .005 и отливать в десятичной системе (18,2) получение нужного результата:

SELECT x,cast(x + .005 as decimal(18,2)) val 
FROM 
    (VALUES(1.0950),(-1.0950)) x(x) 

Результат:

 x  val 
1.0950 1.10 
-1.0950 -1.09 
Смежные вопросы