Вот мой оператор SQL
SELECT ROUND(AVG(column_name), 100)
FROM [database].[dbo].[table]
Ответ, который я получаю, - 3
с возможным диапазоном чисел между 1 - 5
в 908 строках.
Мне нужно, чтобы он сказал 3.0
или 3.09
. Возможно ли это?
Вот мой оператор SQL
SELECT ROUND(AVG(column_name), 100)
FROM [database].[dbo].[table]
Ответ, который я получаю, - 3
с возможным диапазоном чисел между 1 - 5
в 908 строках.
Мне нужно, чтобы он сказал 3.0
или 3.09
. Возможно ли это?
Среднее значение будет иметь тот же тип данных, что и значения, поэтому введите значения:
SELECT ROUND(AVG(CAST(column_name AS FLOAT)), 2) FROM [database].[dbo].[table]
Я не уверен, что это поможет вам черепаномания, но попробуйте это
SELECT CAST(AVG(CAST(column_name as DECIMAL(10,2))) AS DECIMAL(10,2))FROM [table_name]
Поплавок является приблизительным. С другой стороны, десятичный знак сделает его более точным, вы можете прочитать по математике и десятичным знакам поплавков. Сначала я боролся с этим и все еще терял время от времени. Надеюсь, это поможет вам.
IN С# не уверен, если у меня могут возникнуть проблемы с отправкой ответа здесь, но вы попробовали преобразовать его в double и с помощью ExecuteScalar()
попробуйте следующее:
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn= sqlconnectionstring;
SqlCommand cmd = new SQLCommand("SELECT STATEMENT",conn);
cmd.CommandType = CommandType.Text;
conn.Open();
Double result = Convert.ToDouble(cmd.ExecuteScalar());
lblresult.text = "the result is " + result;
conn.Dispose();
cmd.Dispose();
}
Я не совсем уверен, что вы просите, но я думаю, что вы хотите, чтобы число возвращалось с дополнительной точностью.
Вы завершаете вызов в ROUND, но если ваш тип данных столбца не имеет никакой точности больше 0 (например, int), вам необходимо сначала выполнить CAST или CONVERT данных другому типу.
Вот несколько примеров, иллюстрирующих несколько способов данных CAST для разных типов:
SELECT CAST(100 AS decimal(5, 2)) -- Gives you "100.00"
,CAST(100 AS float) --<== Gives you "100"
,CAST(100.0 AS float) --<== Gives you "100"
,CAST(100.01 AS float) --<== Gives you "100.01"
Также проверьте MSDN: Типы данных (Transact-SQL).
Вам даже не нужно делать ROUND
, действительно. Вы можете просто преобразовать ваши значения в DECIMAL
, например:
SELECT AVG(CONVERT(DECIMAL(16,2),YourColumn))
FROM YourTable
CAST(AVG(column_name) AS DECIMAL(5, 2))
Он показывает 100 как 100,00 и 100,05 как 100,05