Должен ли я использовать decimal, float или double для этого простого математического результата?

StackOverflow https://stackoverflow.com/questions/340270

Вопрос

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

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

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

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

Наконец, каким также было бы соответствующее поле SQL datatype.

ваше здоровье!

Это было полезно?

Решение

Что вам нужно, так это ДЕСЯТИЧНЫЙ тип данных:

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 приведет к арифметическому переполнению.

Другие советы

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

Взгляните на эти две страницы для Плавает & Десятичные дроби

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top