DECIMAL/NUMERICデータ型の切り上げ/切り捨て
挿入する値が、DECIMAL列またはNUMERIC列に収まりきらない場合は、値の切り上げ/切り捨てが行なわれます。SQL Engineでは、DECIMAL/NUMERICフィールドに収まりきる最後の桁であるrounding digitの右にある数字が切り上げ/切り捨てられます。
切り上げ/切り捨て桁の右側の値 | 切り捨て/切り上げ桁の値 |
---|---|
< 5 | 変わらない。 |
> 5 | 1増える。 |
切り上げ/切り捨て桁の右の数字が正確に5の場合には、他の考慮事項も生じます。そのような考慮事項の1つは、DBS制御レコードのRoundHalfwayMagUpフィールドの値です。
DBS制御レコードのRoundHalfwayMagUpフィールドをFALSEに設定した場合は、以下のテーブルの要領で切り上げ/切り捨てが実行されます。これは、デフォルトです。
切り上げ/切り捨て桁の右側の値が5の場合に付帯する状況 | 結果 |
---|---|
その後にゼロでない桁がない場合 |
|
その後にゼロでない桁がある場合 | 切り上げ/切り捨て桁の右側の値は5より大きいものとして切り上げ/切り捨てが行なわれます。 |
以下のテーブルは、DECIMAL(3,2)列に値を挿入した場合の結果を示したものです。
INSERTの値 | 値の切り上げ/切り捨て | 切り上げ/切り捨て桁の右側の値 | 結果 |
---|---|---|---|
.014 | 切り捨てられる | < 5 | .01 |
.015 | 切り上げられる | = 5、かつ、最後の格納位置の数が奇数 | .02 |
.0151 | 切り上げられる | > 5 | .02 |
.024 | 切り捨てられる | < 5 | .02 |
.025 | 切り捨てられる | = 5、かつ、最後の格納位置の数が偶数 | .02 |
.0251 | 切り上げられる | > 5 | .03 |
DBS制御レコードのRoundHalfwayMagUpフィールドをTRUEに設定した場合は、すべての中間点の値が、正または負のどちらの値であっても、ゼロから遠ざかる方向に切り上げられます(図を参照)。
ビジネス アプリケーションの場合、これがもっとも一般的な切り上げ/切り捨ての意味体系ですが、切上げの方向にかなり偏っているのも事実です。
DBS制御レコードとRoundHalfwayMagUpフィールドの詳細は、<Teradata Vantage™ - データベース ユーティリティ、B035-1102>を参照してください。
FLOAT、REAL、DOUBLE PRECISIONの各データ型の切り上げ/切り捨て
FLOAT/REAL/DOUBLE PRECISIONへの変換では、使用可能な最近似値に端数処理(丸め)されます。小数や、9,007,199,254,740,992よりも大きな数は、どちらも正確に表現できる保証はありません。そのため、表現可能な最近似値が選択されます。最近似値と見なされる2つの表現可能な値があるときには、最小有効ビットが0で表わされる値が選択されます。
例えば、0.1をFLOAT列に格納すると、その値はわずかに大きな値に丸められます(0.1000000000000000055511151231257827021181583404541015625)。
NUMBERデータ型の切り上げ/切り捨て
値をNUMBERタイプに切り上げ/切り捨てするときは、NUMBERの位取りを考慮しながら、その値に最も近いNUMBERが選択されます。値から同じ距離のNUMBER値が2つある場合、切り上げ/切り捨てのルールはDBS制御フィールドのRoundNumberAsDecによって決定されます。デフォルトでは、RoundNumberAsDecフィールドはFALSEです。これは桁が切り上げられる(ゼロから離れる)ことを示します。DECIMALの切り上げ/切り捨てをNUMBERの切り上げ/切り捨てに従わせる場合は、RoundNumberAsDecフィールドをTRUEに設定します。この場合、切り上げ/切り捨てのルールは、DBS制御フィールドのRoundHalfwayMagUpによって決定されます。
DBS制御レコード、およびRoundNumberAsDecフィールドとRoundHalfwayMagUpフィールドの詳細は、<Teradata Vantage™ - データベース ユーティリティ、B035-1102>を参照してください。