Какой тип данных лучше всего подходит для хранения значений процентов от 0,00% до 100,00%?
sql-server
types
sqldatatypes
Пользователь
источник
источник
Ответы:
Предполагая, что ваши проценты имеют два десятичных знака, тип данных, которые вы используете, зависит от того, как вы планируете хранить свои проценты. Если вы собираетесь хранить их дробный эквивалент (например, 100,00% хранится как 1,0000), я бы сохранил данные в
decimal(5,4)
типе данных сCHECK
ограничением, которое гарантирует, что значения никогда не превышают 1,0000 (при условии, что это ограничение) и никогда не опускаются ниже 0 (при условии, что это пол). Если вы собираетесь сохранить их номинальную стоимость (например, 100,00% хранится как 100,00), то вы должны использоватьdecimal(5,2)
с соответствующимCHECK
ограничением. В сочетании с хорошим именем столбца он дает понять другим разработчикам, что это за данные и как они хранятся в столбце.источник
decimal(5,2)
где 2 обозначает количество цифр после десятичного разделителя?decimal(5,2)
это то, что должно быть зафиксировано проверочным ограничением.decimal(5,4)
и было изменено наdecimal(5,2)
после вышеприведенного комментария ... Я думаю, что этоdecimal(5,4)
было бы лучшее определение - то есть вы хотите сохранить от 0 до 1 с двумя десятичными знаками, а не от 0 до 100. Причина в том, что процентное соотношение не соответствует 100; Таким образом, 100% равно 100/100, что составляет 1. В большинстве случаев такой подход имеет смысл (например100% * 100% = 100%
, нет10000%
;1 * 1 = 1
).100.00
), вам необходимоdecimal(5,2)
. Если значения будут храниться в виде дробей (например1.0000
), тогда вам нужноdecimal(5,4)
. Буду обновлять пост.decimal
.columnName decimal(precision, scale)
. Точность говорит об общем количестве цифр, которое может содержаться в числе, масштаб говорит, сколько из них стоит после десятичного разряда,decimal(3,2)
а также число, которое может быть представлено как#.##
;decimal(5,3)
было бы##.###
.decimal
иnumeric
по сути одно и то же. Однакоdecimal
он соответствует стандарту ANSI, поэтому всегда используйте его, если не указано иное (например, стандарты кодирования вашей компании).Примеры сценариев
decimal(5,4)
.decimal(3,2)
.Пример:
Дальнейшее чтение:
0 to 1
vs0 to 100
: C #: сохранение процентов, 50 или 0,50?источник
Я согласен с Томасом и выбрал бы решение DECIMAL (5,4) по крайней мере для приложений WPF.
Взгляните на строку числового формата MSDN, чтобы узнать, почему: http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
Тогда вы сможете использовать это в своем коде XAML:
источник
Если ваш уровень точности составляет 2 десятичных разряда, то "smallint" обработает это в наименьшем пространстве (2 байта). Вы сохраняете процент, умноженный на 100.
РЕДАКТИРОВАТЬ: десятичный тип, вероятно, лучше подходит. Тогда вам не нужно масштабировать вручную. На каждое значение требуется 5 байтов.
источник
Используйте числовые (n, n), где n имеет разрешение, достаточное для округления до 1,00. Например:
источник