Почему бы не использовать 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
Другой усекает без округления решения и примера.
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
Вот способ, которым я смог усечь и не вокруг:
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
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 является усеченным. Вы хотите десятичное число или нет?
В противном случае использование
select ceiling(@value),floor(@value)
, Если Вы делаете это с 0 тогда, делает раунд:
select round(@value,2)
Пожалуйста, попробуйте использовать этот код для преобразования трех десятичных значений после точки в два десятичных знака:
declare @val decimal (8, 2)
select @val = 123.456
select @val = @val
select @val
Результат: 123,46
Round имеет необязательный параметр
Select round(123.456, 2, 1) will = 123.45
Select round(123.456, 2, 0) will = 123.46
Я думаю, вам нужно только десятичное значение, в этом случае вы можете использовать следующее:
declare @val decimal (8, 3)
SET @val = 123.456
SELECT @val - ROUND(@val,0,1)
Это удалит десятичную часть любого числа
SELECT ROUND(@val,0,1)