適用対象:
、Databricks、SQL
、Databricks、ランタイム19以上
16桁または34桁の有効数字を持つ10進数浮動小数点数を表し、固定のスケールはありません。
Syntax
DECFLOAT [ ( p ) ]
-
p: 有効小数点数の最大数。 サポートされる値は16と34です。 デフォルトは34です。
DECFLOAT スケールの議論を受け入れません。 それぞれの値は独自の指数を持っています。
Limits
| Property | DECFLOAT(16) |
DECFLOAT(34) |
|---|---|---|
| 有効数字 | 最大16人まで | 最大34 |
| 最小の正のゼロでない値 | 1E-398 |
1E-6176 |
| 最大の正の有限値 | (10^16 - 1) × 10^369 |
(10^34 - 1) × 10^6111 |
負の数にも同じ制限が適用されます。 両タイプとも無限大とNaNをサポートします。
Literals
文字列またはサポートされた数値付きの CAST を使います。 文字列はまた、 NaN、 Inf、または Infinityを含むこともあります。
Notes
DECFLOAT は 0.1 といった小数点の値を正確に表します。 精度を超える値は誤差なく丸めることができ、 TRY_CASTも含まれます。 小数点の文字を直接キャストしてください。
FLOATやDOUBLEで変換すると精度が低下することがあります。
文字列出力は後ろのゼロを保持するため、 1.5 と 1.50 のような等しい値でも異なる文字列(+15E-1 と +150E-2)が生成されます。 DECFLOATから DECIMAL へのキャストは、 DECFLOAT_ROUNDING_MODEとは独立して半分の半分の半分の半分の投擲をします。
- 両方のオペランドが同じDECFLOAT型を持つ場合、算術は精度を保ちます。 精度の混合や他の対応数値型との演算では
DECFLOAT(34)を使用します。 -
SUMそしてAVGDECFLOAT(34)返ってくる。MIN入力精度を保持MAX。 -
SQRTABS、ROUND直接DECFLOATを受け入れます。
DECFLOAT_ROUNDING_MODE キャストの丸めをDECFLOAT、 +、 -、 *、 /、 SQRT、 SUM、 AVGまで制御します。 既定値は ROUND_HALF_EVEN です。 その他の対応モードには ROUND_HALF_UP、 ROUND_CEILING、 ROUND_FLOOR、 ROUND_DOWNがあります。
DIV
DECFLOAT_ROUNDING_MODEに関係なく、結果の分数部分を除去します。
ROUND、 BROUND、 TRUNCATE はそれぞれ独自の丸め規則を用います。
> SET DECFLOAT_ROUNDING_MODE = ROUND_FLOOR;
> SELECT CURRENT_DECFLOAT_ROUNDING_MODE();
ROUND_FLOOR
デフォルトの丸めモードでは、オーバーフローは無限大を、ゼロで割ると無限大(NaN)が得られます。
ANSIモード はこれらの結果を変えません。 支持 TRY_* 算術関数は無限大とNaNを保存し、返 NULLしません。 NaNは等しいと比較し、正の無限大の後にソートします。 正の零と負の零は同等に比較されます。
ISNANを使ってNaNを検出してください。
例示
> SELECT CAST('1.5' AS DECFLOAT(34)) + CAST('2.5' AS DECFLOAT(34)) AS total;
+40E-1
> SELECT CAST(CAST('1.23E+100' AS DECFLOAT(34)) AS STRING);
+123E+98
> SELECT typeof(CAST('1' AS DECFLOAT(16)) + 1);
decfloat(34)
制限事項
- 残りの操作とビット単位の操作はサポートされていません。
-
DOUBLE入力を必要とする関数はDECFLOATを直接受け入れません。 まず値をDOUBLEに変換してください(これにより精度の損失が生じる可能性があります)。 - DECFLOATは削除ベクターとは互換性がありません。 DECFLOAT列を持つDeltaテーブルを作成する際は、
TBLPROPERTIES ('delta.enableDeletionVectors' = 'false')を設定してください。 既存のテーブルについては、DECFLOAT列を追加する前に 削除ベクトルテーブル機能を外 してください。 - DECFLOATを含むデルタテーブルでは 、アイスバーグ読み取り が有効にはなりません。
- DECFLOATの値をParquetファイルに直接書き込むことはサポートされていません。
- DECFLOATの列には、データスキップのための最小/最大統計はありません。 それらはパーティションカラム、クラスタリングキー、Zオーダーカラム、ブルームフィルターインデックスカラムではありえません。
-
DECFLOAT(16)とDECFLOAT(34)の列をALTER COLUMNで切り替えるのはサポートされていません。