このコードを実行するとSQL Server Management Studioによってエラーがスローされます。
declare @percentage numeric(3,2)
set @percentage = cast(15 as numeric(3,2))
しかし、数値宣言を
declare @percentage numeric(4,2)
set @percentage = cast(15 as numeric(4,2))
すべてがうまくいきます。
数値データ型に制限はありますか?
数値は、桁の合計数を定義し、次に小数点以下の数を定義します。
Numeric(3,2)は最大9.99までしか保持できません。
見てみましょう、数値(3,2)。つまり、データ用に3つの場所があり、そのうちの2つが小数点の右側にあり、小数点の左側に1つしか残っていません。 15は、小数点の左側に2桁あります。ところで、値として100を持っている可能性がある場合、数値(5、2)に増やします
NUMERIC(3,2)
は、合計で3桁、小数点以下2桁を意味します。そのため、小数点の前に小数点が1つだけあります。
NUMERIC(5,2)
を試してください-3つ前、2つ後の小数点。
精度とスケールはしばしば誤解されます。 numeric(3,2)では、全体で3桁が必要ですが、小数点以下2桁が必要です。 15 => 15.00が必要な場合、先頭の1がオーバーフローを引き起こします(小数点の右側に2桁が必要な場合は、左側にもう1桁の余地しかないため)。 4,2では、4桁すべてが適合するため、問題はありません。