2008-12-04 5 views
5

Я делаю очень просто математику и сохраняю результат в MS SQL2008 DB.Должен ли я использовать десятичный, плавающий или двойной для этого простого математического результата?

Я усредняет некоторые цифры, которые являются значениями в байтах между 1 < -> 5. Я хочу записать только 2 десятичных знака. Я не забочусь о округлении для второго десятичного знака (например, 1.155 == 1.5 или 1.6 .. я не слишком поэтапный).

Итак, должен ли я хранить средний результат как поплавок, десятичный или двойной?

Когда я проверяю, что возвращает LINQ, он может вернуть все три значения!

И наконец, что бы это было в соответствующем поле типа данных SQL.

приветствия!

+0

Что такое SENSE этих чисел? Это определяет выбор десятичного/двойного/другого типа – 2015-09-25 05:13:44

ответ

2

Что вам нужно, это DECIMAL тип данных:

declare @val decimal(10,2) 
select @val = 10.155 
select @val 

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

select val = round(10.155, 2, 0) -- rounded 
select val = round(10.155, 2, 1) -- truncated 

Decimal (10,2) означает, что десять цифр могут быть использованы, и что два из них должны быть приняты как после десятичной точки. то есть наибольшее число, которое может содержать десятичное число (4,2), равно 99,99. Попытка установить его на 100 приведет к арифметическому переполнению.

+0

Как DECIMAL (10,2) по сравнению с FLOAT, сравните размер поля. например. они оба 4K, и т.д .. ??? – 2008-12-04 22:38:12

0

Decimal - это самый простой, однако ни одна из mentined сделает работу

1

я бы выбрал Float над Double и, вероятно, Float над -десятичная :. Id для Floatalthough должен дать тот же результат.

Посмотрите на этих двух страницах для Floats & Decimals

0

Если вы хотите сохранить результаты, используя как мало места, как это возможно, вероятно, можно сделать что-то вроде этого (псевдокод):

integer = (sum(all_values)/all_values.count().float) * 100; 

Это даст вам значение 352 в среднем 3,52, поэтому вы можете сохранить его как целое (байт будет достаточно большим, я думаю), и просто разделите его на 100, когда вы хотите отобразить его.

С другой стороны, если вы не заботитесь о хранении среднего значения, использование значений float возможно быстрее. (Тест и посмотреть, что на самом деле быстро в вашей системе.)

1

Десятичное значение в основном используется для валюты. В то время как это сработает, люди могут найти это запутанным. В этом случае я думаю, что float будет лучшим выбором.