Tipo DECFLOAT

Aplica-se a:assinalado Databricks SQL assinalado sim Databricks Runtime 19 e superiores

Representa números de ponto flutuante em base 10 com 16 ou 34 dígitos significativos e sem escala fixa.

Important

DECFLOAT está em Beta. Um administrador de espaço de trabalho deve ativar o tipo de dado DECFLOAT em Pré-visualizações.

Sintaxe

DECFLOAT [ ( p ) ]
  • p: O número máximo de dígitos decimais significativos. Os valores suportados são 16 e 34. O padrão é 34.

DECFLOAT não aceita um argumento de escala. Cada valor tem o seu próprio expoente.

Limits

Property DECFLOAT(16) DECFLOAT(34)
Dígitos significativos Até aos 16 Até 34
Menor valor positivo não nulo 1E-398 1E-6176
Maior valor positivo finito (10^16 - 1) × 10^369 (10^34 - 1) × 10^6111

Os mesmos limites aplicam-se aos números negativos. Ambos os tipos também suportam infinito e NaN.

Literals

CAST Use com uma cadeia de caracteres ou valor numérico suportado. As cadeias também podem conter NaN, Inf, ou Infinity.

Notes

DECFLOAT representa valores decimais, como 0.1 exatamente. Valores que excedam a precisão podem arredondar sem erro, incluindo com TRY_CAST. Lança texto decimal diretamente. Converter através FLOAT ou DOUBLE pode perder precisão.

A saída de cadeias preserva os zeros seguintes, por isso valores iguais como 1.5 e 1.50 podem produzir cadeias diferentes (+15E-1 e +150E-2). Lança de DECFLOAT para DECIMAL arredondar metade para cima, independentemente de DECFLOAT_ROUNDING_MODE.

  • A aritmética preserva a precisão quando ambos os operandos têm o mesmo tipo DECFLOAT. Precisões ou operações mistas com outros tipos numéricos suportados utilizam DECFLOAT(34).
  • SUM e AVG regressar DECFLOAT(34). MIN e MAX preservar a precisão da entrada.
  • SQRT, ABS, e ROUND aceitar diretamente o DECFLOAT.

DECFLOAT_ROUNDING_MODE arredondamento de controlos para lançamentos para DECFLOAT, +, -, *, /, SQRT, SUM, , e AVG. A predefinição é ROUND_HALF_EVEN. Outros modos suportados são ROUND_HALF_UP, ROUND_CEILING, ROUND_FLOOR, e ROUND_DOWN. DIV remove a parte fracionária do resultado, independentemente de DECFLOAT_ROUNDING_MODE. ROUND, BROUND, e TRUNCATE usam as suas próprias regras de arredondamento.

> SET DECFLOAT_ROUNDING_MODE = ROUND_FLOOR;
> SELECT CURRENT_DECFLOAT_ROUNDING_MODE();
  ROUND_FLOOR

Com o modo de arredondamento padrão, o overflow produz infinito e a divisão por zero produz infinito ou NaN. O modo ANSI não altera estes resultados. As funções aritméticas suportadas TRY_* preservam o infinito e o NaN em vez de devolver NULL. Os NaNs comparam iguais e ordenam após o infinito positivo. Positivo e negativo zero comparam-se. Usado ISNAN para detetar NaN.

Examples

> 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)

Limitations

  • As operações de remanescente e bit a bit não são suportadas.
  • As funções que requerem DOUBLE entradas não aceitam diretamente o DECFLOAT. Converta o valor para DOUBLE o primeiro (isto pode resultar em perda de precisão).
  • O DECFLOAT não é compatível com vetores de deleção. Ao criar uma tabela Delta com colunas DECFLOAT, defina TBLPROPERTIES ('delta.enableDeletionVectors' = 'false'). Para tabelas existentes, elimine a característica de tabela de vetor de exclusão antes de adicionar colunas DECFLOAT.
  • Tabelas Delta contendo DECFLOAT não podem ter leituras Iceberg ativadas.
  • Escrever valores DECFLOAT diretamente em ficheiros Parquet não é suportado.
  • As colunas DECFLOAT não têm estatísticas min/max para saltar dados. Não podem ser colunas de partição, chaves de agrupamento, colunas de ordem Z ou colunas de índice de filtro de Bloom.
  • Alterar uma coluna entre DECFLOAT(16) e DECFLOAT(34) com ALTER COLUMN não é suportado.