Усеченный (не вокруг) десятичные разряды в SQL Server

Почему бы не использовать STL: vector? Так просто, и вам не нужно удалять вектор.

int rows = 100;
int cols = 200;
vector< vector<int> > f(rows, vector<int>(cols));
f[rows - 1][cols - 1] = 0; // use it like arrays
184
задан MarredCheese 7 May 2019 в 08:07
поделиться

12 ответов

select round(123.456, 2, 1)
179
ответ дан Paul 23 November 2019 в 05:55
поделиться
select convert(int,@value)
-4
ответ дан SQLMenace 23 November 2019 в 05:55
поделиться

Другой усекает без округления решения и примера.

    Convert 71.950005666 to a single decimal place number (71.9)
    1) 71.950005666 * 10.0 = 719.50005666
    2) Floor(719.50005666) = 719.0
    3) 719.0 / 10.0 = 71.9

    select Floor(71.950005666 * 10.0) / 10.0
6
ответ дан James 23 November 2019 в 05:55
поделиться

Вот способ, которым я смог усечь и не вокруг:

select 100.0019-(100.0019%.001)

возвраты 100.0010

И Ваш пример:

select 123.456-(123.456%.001)

возвраты 123.450

Теперь, если Вы хотите избавиться от конечного нуля, просто бросьте его:

select cast((123.456-(123.456%.001)) as decimal (18,2))

возвраты 123.45

13
ответ дан sth 23 November 2019 в 05:55
поделиться
ROUND ( 123.456 , 2 , 1 )

, Когда третий параметр ! = 0 это усекает, а не раунды

http://msdn.microsoft.com/en-us/library/ms175003 (SQL.90) синтаксис .aspx

ROUND ( numeric_expression , length [ ,function ] )

, Аргументами

  • numeric_expression Является выражение точной числовой или приблизительной категории числовых типов данных, за исключением типа данных bit.

  • length точность, к которой должен быть округлен numeric_expression. длина должна быть выражением типа tinyint, smallint, или интервал, Когда длина является положительным числом, numeric_expression, округлен к количеству десятичных разрядов, определенных длиной. Когда длина является отрицательным числом, numeric_expression округлен на левой стороне десятичной точки, как определено длиной.

  • function тип операции для выполнения. функция должна быть tinyint, smallint, или интервал, Когда функция опущена или имеет значение 0 (значение по умолчанию), numeric_expression, округлен. Когда значение кроме 0 определяется, numeric_expression является усеченным.
259
ответ дан hims056 23 November 2019 в 05:55
поделиться

Вы хотите десятичное число или нет?

В противном случае использование

select ceiling(@value),floor(@value)

, Если Вы делаете это с 0 тогда, делает раунд:

select round(@value,2)
6
ответ дан Peter Mortensen 23 November 2019 в 05:55
поделиться
SELECT Cast(Round(123.456,2,1) as decimal(18,2))
31
ответ дан 23 November 2019 в 05:55
поделиться

Пожалуйста, попробуйте использовать этот код для преобразования трех десятичных значений после точки в два десятичных знака:

declare @val decimal (8, 2)
select @val = 123.456
select @val =  @val

select @val

Результат: 123,46

0
ответ дан 23 November 2019 в 05:55
поделиться

Mod(x,1) is the easiest way I think.

-3
ответ дан 23 November 2019 в 05:55
поделиться

Round имеет необязательный параметр

Select round(123.456, 2, 1)  will = 123.45
Select round(123.456, 2, 0)  will = 123.46
8
ответ дан 23 November 2019 в 05:55
поделиться

Я думаю, вам нужно только десятичное значение, в этом случае вы можете использовать следующее:

declare @val decimal (8, 3)
SET @val = 123.456

SELECT @val - ROUND(@val,0,1)
0
ответ дан 23 November 2019 в 05:55
поделиться

Это удалит десятичную часть любого числа

SELECT ROUND(@val,0,1)
4
ответ дан 23 November 2019 в 05:55
поделиться