精度とスケールの違いは何ですか?


141

Oracleの精度とスケールの違いは何ですか?チュートリアルでは通常、主キーを作成するときにスケールを空のままにし、精度を6に設定します。

精度とスケールは何を表していますか?

回答:


203

精度4、スケール2:99.99

精度10、スケール0:9999999999

精度8、スケール3:99999.999

精度5、スケール-3:99999000


15
負のスケールの動作を説明できますか?
オタク2014年

2
小数点以下の多くの整数値を丸める/無視するように見える
JDPeckham

3
精度には常にスケール部分が含まれることに注意してください。例:精度4、スケール2-99.9999を超える数値は失敗します。試行:デュアルからキャスト(NUMBER(4,2)として99.99999)を選択します。//OK; デュアルからキャスト(100.9をNUMBER(4,2)として)を選択します。//不合格;
ジャマジャファロフ2015年

@JamaDjafarov 99.99999は、以下に示すように失敗します。`21:53:54 CB900 @ XYZ>デュアルからキャストを選択(99.99999をNUMBER(4,2)として)。デュアルからキャストを選択(NUMBER(4,2)として99.99999)*行1でエラー:ORA-01438:この列に指定された精度よりも大きい値21:52:32 CB900 @ ASCEND1> v $ instanceからバージョンを選択; バージョン - - - - - - - - - - - - - - - - - - - - - - - - - -12.1.0.2.0 `
Phalgun 2017年

@Phalgun select cast(99.9999 as NUMBER(4,2))from DUAL; 切り捨てによって数値が99から100に切り上げられ、NUMBER(4,2)には大きすぎるため、これは悪い例です。DUALからselect cast(88.8888 as NUMBER(4,2))を試してください。代わりに、応答は88.89です。
スーパーベック

58

精度は有効桁数です。Oracleは、1〜38の範囲の精度で数値の移植性を保証します。

スケールは、小数点の右側(正)または左側(負)の桁数です。スケールの範囲は-84〜127です。

あなたの場合、精度6のIDは、7桁以上の有効数字を受け付けないことを意味します。

参照:

http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832

このページには、精度とスケールを理解できるいくつかの例もあります。


1
つまり、最後のバンバーが1000000になるということですか?
user700792

9
+1:これを理解するための鍵は、内部の数値形式(仮数と指数)を理解することだと思います。精度は仮数の可能な長さを制限し、スケールは可能な最小の指数を制限します。
David Aldridge 2013年

@DavidAldridgeエコーします。仮数と指数に関する回答として投稿することを検討してください。数値は実際には可変長形式で格納されます。
Lalit Kumar B

55

精度は桁数の合計で、1〜38の範囲で指定できます。
スケールは小数点以下の桁数で、丸めのために負の値として設定することもできます。

例:
NUMBER(7,5):12.12345
NUMBER(5,0):12345

ORACLE Webサイトの詳細:https :
//docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832


また、Scaleは、小数点の直後ではなく、小数点の右側(正)または左側(負)の桁数です。
Lalit Kumar B 2015

koljaTMの例を見てください。精度は、有効な桁数であり、値を持つ場合があります(つまり、プレースホルダーとしての「0」だけではありません)。スケールは、それらが小数点に関してどのように落ちるかを示します。スケールは負であり、0を超える精度を気にしないことを示します。NUMBER(1、-4):10個の値のみを許可します:00000、10000、20000 ... 90000
ゴードン

1
精度は、桁数の合計ではありません。David Aldridgeがmanojldsへの彼のコメントで説明したように、それは仮数です-あなたが気にする有効桁数。指数は、難解ではありますが、より正確な説明であると考えられています。負のスケールは、小数点の後に数字がなく、小数点の左側にプレースホルダーとしてその数の0があります。NUMBER(1、-4)は5桁になりますが、10,000桁の最初の1桁だけが気になる値になります。
ゴードン

34

多分もっと明確:

精度は桁数の合計であり、スケールが含まれていることに注意してください

NUMBER(精度、スケール)

精度8、スケール3:87654.321

精度5、スケール3:54.321

精度5、スケール1:5432.1

精度5、スケール0:54321

精度5、スケール-1:54320

精度5、スケール-3:54000


19

スケールは小数点(またはロケールによってはコロン)の後の桁数です

精度は、有効数字の総数です

スケールVS精度


1

精度:基数ポイントの前後の合計桁数。例:123.456ここでは精度は6です。

スケール:基数ポイント後の総桁数。例:ここ123.456 Scaleis 3


-5

値が9999.988で精度4、スケール2の場合、9999(精度を表す)を意味します。99(スケールは2なので、.988は.99に丸められます)

値が9999.9887で精度が4の場合、スケールは2で、9999.99を意味します


7
いいえ、精度は保存する有効桁数です。両方のあなたのケースで保存された精度は6で、スケールは2です
デヴィッド・オルドリッジ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.