0.00%から100.00%の範囲のパーセント値を保持するのに最適なデータ型は何ですか?
パーセンテージの小数点以下2桁を想定すると、使用するデータ型は、パーセンテージの格納方法によって異なります。それらの小数部分を保存する場合(たとえば、100.00%を1.0000として保存する場合)、値が1.0000を超えないことを保証するCHECK
制約のあるdecimal(5,4)
データ型にデータを保存します。それが上限です)、0未満にならないようにします(床であると仮定します)。額面を保存する場合(たとえば、100.00%は100.00として保存されます)、decimal(5,2)
を適切なCHECK
制約とともに使用する必要があります。適切な列名と組み合わせると、他の開発者に対して、データが何であり、データが列にどのように格納されるかが明確になります。
decimal
として保持します。columnName decimal(precision, scale)
。精度は数値に保持できる合計桁数を示し、スケールは小数点以下の桁数を示します。したがって、decimal(3,2)
は#.##
として表現できる数値で、decimal(5,3)
は##.###
になります。decimal
とnumeric
は本質的に同じものです。ただし、decimal
はANSIに準拠しているため、特に指示がない限り、常に使用してください(たとえば、会社のコーディング標準によって)。シナリオ例
decimal(5,4)
が必要です。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)
)
さらに読む:
0 to 1
vs 0 to 100
: C#:パーセンテージの保存、50または0.50?私はトーマスに同意し、少なくともWPFアプリケーションにはDECIMAL(5,4)ソリューションを選択します。
MSDN Numeric Format Stringを参照して理由を確認してください: http://msdn.Microsoft.com/en-us/library/dwhawy9k#PFormatString
パーセント( "P")形式指定子は、数値に100を掛けて、パーセントを表す文字列に変換します。
次に、XAMLコードでこれを使用できます。
DataFormatString="{}{0:P}"
小数点以下2桁が精度のレベルである場合、「smallint」はこれを最小スペース(2バイト)で処理します。 100倍したパーセントを保存します。
編集: decimal タイプはおそらくより良い一致です。その後、手動でスケーリングする必要はありません。値ごとに5バイトかかります。
Numeric(n、n)を使用します。nには1.00に丸めるのに十分な解像度があります。例えば:
declare @discount numeric(9,9)
, @quantity int
select @discount = 0.999999999
, @quantity = 10000
select convert(money, @discount * @quantity)