データベースに次の列を指定しています。decimal(5,2)
これをどのように解釈しますか。
SQL Serverの管理スタジオで見たように列のプロパティによると、私はそれが意味することがわかります:小数(数値精度、数値スケール)。
精度とスケールは、実際にはどういう意味ですか?
これを5桁の10進数と小数点以下2桁の桁数として解釈するのは簡単でしょう…つまり12345.12
P.S私は同僚から正しい答えを決めることができましたが、答えをオンラインで見つけるのは非常に困難でした。そのため、今後の参考のために、スタックオーバーフローに関する質問と回答をここに文書化しておきたいと思います。
数値精度とは、数値に含まれている最大桁数のことです。
すなわち1234567.89は9の精度を持つ
数値スケールは小数点以下の最大桁数を表します
すなわち123456.789は3のスケールを持ちます
したがって、decimal(5,2)の最大許容値は999.99です。
数値の精度は桁数です。
数値の位取りは、小数点以下の桁数です。
フィールド定義に精度とスケールを設定するときに一般的に暗示されているのは、それらが最大値を表すということです。
例えば、precision=5
およびscale=2
で定義された10進数フィールドでは、以下の値が許可されます。
123.45
(p = 5、s = 2)12.34
(p = 4、s = 2)12345
(p = 5、s = 0)123.4
(p = 4、s = 1)0
(p = 0、s = 0)次の値は許可されていないか、データが失われる可能性があります。
12.345
(p = 5、s = 3)=>は12.35
に切り捨てられる可能性があります(p = 4、s = 2)1234.56
(p = 6、s = 2)=>は1234.6
に切り捨てられる可能性があります(p = 5、s = 1)123.456
(p = 6、s = 3)=>は123.46
に切り捨てられる可能性があります(p = 5、s = 2)123450
(p = 6、s = 0)=>範囲外範囲は一般に精度で定義されることに注意してください。|value| < 10^p
...
SQL Server 2000ドキュメントの 精度、スケール、および長さ は、次のようになります。
精度は数値の桁数です。スケールは、数値の小数点の右側の桁数です。たとえば、123.45という数値の精度は5、位取りは2です。