78

このコードを実行すると、 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))

すべてうまくいく。

数値データ型に制限はありますか?

4

5 に答える 5

152

Numeric は、TOTAL 桁数を定義し、次に小数点以下の数値を定義します。

数値 (3,2) は 9.99 までしか保持できません。

于 2010-01-13T18:21:11.863 に答える
31

見てみましょう、数値 (3,2)。つまり、データには 3 つの場所があり、そのうちの 2 つは小数点の右側にあり、小数点の左側には 1 つのみが残ります。15 は小数点以下 2 桁です。ところで、値として 100 がある場合は、それを数値 (5, 2) に増やします

于 2010-01-13T18:21:34.160 に答える
21

NUMERIC(3,2)意味: 合計 3 桁、小数点以下 2 桁。したがって、小数点の前には小数点が 1 つしかありません。

試してくださいNUMERIC(5,2)- 小数点の前に 3 つ、小数点の後に 2 つ。

于 2010-01-13T18:21:52.157 に答える
18

精度とスケールはよく誤解されています。numeric(3,2) では、全体で 3 桁が必要ですが、小数点以下 2 桁が必要です。15 => 15.00 が必要な場合は、先頭の 1 がオーバーフローを引き起こします (小数点の右側に 2 桁が必要な場合は、左側にもう 1 桁のスペースしかないため)。4,2 は 4 桁すべてが収まるので問題ありません。

于 2010-01-13T18:22:01.867 に答える
0

かなり古い質問ですが、完成のためにこれをここに追加すると思いました: クエリに影響を与え、このエラーをスローする可能性のある SQL Server データベース設定があります。

SET NUMERIC_ROUNDABORT { ON | OFF }

これを ON に設定すると、結果が結果のデータ型に適合しないという正確なエラーが発生します。

たとえば、これをONにして実行する

SELECT cast(0.0 / 1 AS NUMERIC(4,2))

このエラーをスローします。

詳細: https://docs.microsoft.com/en-us/sql/t-sql/statements/set-numeric-roundabort-transact-sql

また、それを設定する別の方法: プロフィールページ

于 2021-08-25T16:21:55.737 に答える