5 ответов:
предполагая два десятичных знака в процентах, тип данных, который вы используете, зависит от того, как вы планируете хранить свои проценты. Если вы собираетесь хранить их дробный эквивалент (например, 100.00% хранится как 1.0000), я бы хранить данные в
decimal(5,4)тип данныхCHECKограничение, которое гарантирует, что значения никогда не превышают 1.0000 (предполагая, что это колпачок) и никогда не опускаются ниже 0 (предполагая, что это пол). Если вы собираетесь хранить их номинальную стоимость (например, 100.00% хранится как 100.00), тогда вы должны использоватьdecimal(5,2)соответствующейCHECKограничения. В сочетании с хорошим именем столбца он позволяет другим разработчикам понять, что такое данные и как они хранятся в столбце.
- удерживайте как
decimal.- добавьте проверочные ограничения, если вы хотите ограничить диапазон (например, от 0 до 100%; в некоторых случаях могут быть веские причины выйти за пределы 100% или потенциально даже в негативы).
- стоимость лечения 1 до 100%, 0.5 А 50% и т. д. Это позволит любым математическим операциям функционировать так, как ожидалось (т. е. В отличие от использования значения 100 как 100%).
- изменить точность и масштаб по мере необходимости (эти два значения в скобках
columnName decimal(precision, scale). Точность говорит общее количество цифр, которые могут содержаться в числе, масштаб говорит, сколько из них после десятичного знака, поэтомуdecimal(3,2)- это число, которое может быть представлено как#.##;decimal(5,3)будет##.###.decimalиnumericпо сути то же самое. Однакоdecimalсоответствует ANSI, поэтому всегда используйте это, если не указано иное (например, по стандартам кодирования вашей компании).пример Сценарии
- для вашего случая (от 0,00% до 100,00%) вы бы хотели
decimal(5,4).- для наиболее распространенного случая (от 0% до 100%) вы бы хотели
decimal(3,2).- в обоих из вышеперечисленных ограничений проверки будут одинаковыми
пример:
if object_id('Demo') is null create table Demo ( Id bigint not null identity(1,1) constraint pk_Demo primary key , Name nvarchar(256) not null constraint uk_Demo unique , SomePercentValue decimal(3,2) constraint chk_Demo_SomePercentValue check (SomePercentValue between 0 and 1) , SomePrecisionPercentValue decimal(5,2) constraint chk_Demo_SomePrecisionPercentValue check (SomePrecisionPercentValue between 0 and 1) )Читайте Далее:
- Десятичная Шкала И Точность: http://msdn.microsoft.com/en-us/library/aa258832%28SQL.80%29.aspx
0 to 1vs0 to 100:C#: хранение процентов, 50 или 0.50?- десятичная и числовая:есть ли разница между десятичной и числовой в SQL Server?
Если 2 десятичных знака - это ваш уровень точности, то "smallint" будет обрабатывать это в наименьшем пространстве (2 байта). Вы храните процент, умноженный на 100.
"правка":decimal тип, вероятно, лучше соответствует. Тогда вам не нужно вручную масштабировать. Она занимает 5 байт на значение.
Я согласен с Томасом, и я бы выбрал десятичное(5,4) решение, по крайней мере, для приложений WPF.
посмотрите на строку числового формата MSDN, чтобы узнать, почему : http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
спецификатор формата percent ("P") умножает число на 100 и преобразует его в строку, представляющую процент.
тогда вы сможете использовать это в своем XAML код:
DataFormatString="{}{0:P}"
используйте numeric (n,n), где n имеет достаточное разрешение для округления до 1,00. Например:
declare @discount numeric(9,9) , @quantity int select @discount = 0.999999999 , @quantity = 10000 select convert(money, @discount * @quantity)
Comments