回答:
パーセンテージで小数点以下2桁を想定すると、使用するデータ型は、パーセンテージの格納方法によって異なります。同等の小数を格納する場合(たとえば、100.00%が1.0000として格納される)、値が1.0000を超えないこと(これが上限であると想定)、0未満にならないことを保証decimal(5,4)
するCHECK
制約付きのデータ型にデータを格納します。 (それが床であると仮定します)。それらの額面を保存する場合(たとえば、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から100ではなく、小数点以下2桁で0から1を格納したいのです。パーセンテージである理由は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)
。例:
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数値フォーマット文字列を見てください。http: //msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
パーセント( "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)