Должен ли я использовать десятичное число, число с плавающей запятой или двойной для этого простого математического результата? - PullRequest
5 голосов
/ 04 декабря 2008

Я делаю несколько простых математических операций и сохраняю результат в БД MS SQL2008.

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

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

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

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

ура!

Ответы [ 5 ]

2 голосов
/ 04 декабря 2008

Что вам нужно, так это тип данных 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

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

1 голос
/ 04 декабря 2008

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

1 голос
/ 04 декабря 2008

Я бы выбрал Float вместо Double и, вероятно, Float вместо Decimal :. Я бы пошел на Float, хотя все должны давать одинаковый результат.

Посмотрите на эти две страницы для Поплавки & Десятичные знаки

0 голосов
/ 04 декабря 2008

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

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

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

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

0 голосов
/ 04 декабря 2008

Десятичное число - это самое простое, однако любой из менталов сделает работу

...