16.20 - 切り上げ/切り捨て - Teradata Vantage NewSQL Engine

Teradata Vantage™ データ タイプおよびリテラル

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1143-162K-JPN

DECIMAL/NUMERICデータ型の切り上げ/切り捨て

挿入する値が、DECIMAL列またはNUMERIC列に収まりきらない場合は、値の切り上げ/切り捨てが行なわれます。Teradata Databaseでは、DECIMAL/NUMERICフィールドに収まりきる最後の桁であるrounding digitの右にある数字が切り上げ/切り捨てられます。

切り上げ/切り捨て桁の右側の値 切り捨て/切り上げ桁の値
< 5 変わらない。
> 5 1増える。

切り上げ/切り捨て桁の右の数字が正確に5の場合には、他の考慮事項も生じます。そのような考慮事項の1つは、DBS制御レコードのRoundHalfwayMagUpフィールドの値です。

DBS制御レコードのRoundHalfwayMagUpフィールドをFALSEに設定した場合は、以下のテーブルの要領で切り上げ/切り捨てが実行されます。これは、デフォルトです。

切り上げ/切り捨て桁の右側の値が5の場合に付帯する状況 結果
その後にゼロでない桁がない場合
  • 切り捨て/切り上げ桁の数字が奇数の場合、切り捨て/切り上げ桁の数字は1ずつ増えます。
  • 切り捨て/切り上げ桁の数字が偶数の場合、切り捨て/切り上げ桁の数字は変化しません。
その後にゼロでない桁がある場合 切り上げ/切り捨て桁の右側の値は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>を参照してください。