web-dev-qa-db-ja.com

データベース内の数値の精度と位取りをどのように解釈しますか

データベースに次の列を指定しています。decimal(5,2)

これをどのように解釈しますか。

SQL Serverの管理スタジオで見たように列のプロパティによると、私はそれが意味することがわかります:小数(数値精度、数値スケール)。

精度とスケールは、実際にはどういう意味ですか?

これを5桁の10進数と小数点以下2桁の桁数として解釈するのは簡単でしょう…つまり12345.12

P.S私は同僚から正しい答えを決めることができましたが、答えをオンラインで見つけるのは非常に困難でした。そのため、今後の参考のために、スタックオーバーフローに関する質問と回答をここに文書化しておきたいと思います。

212
mezoid

数値精度とは、数値に含まれている最大桁数のことです。

すなわち1234567.89は9の精度を持つ

数値スケールは小数点以下の最大桁数を表します

すなわち123456.789は3のスケールを持ちます

したがって、decimal(5,2)の最大許容値は999.99です。

348
mezoid

数値の精度は桁数です。

数値の位取りは、小数点以下の桁数です。

フィールド定義に精度とスケールを設定するときに一般的に暗示されているのは、それらが最大値を表すということです。

例えば、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 ...

74
boumbh

SQL Server 2000ドキュメントの 精度、スケール、および長さ は、次のようになります。

精度は数値の桁数です。スケールは、数値の小数点の右側の桁数です。たとえば、123.45という数値の精度は5、位取りは2です。

21
Chris