[firebase-br] Tipos de dados Numeric X Decimal X Float

Carlos Sato cansato em ig.com.br
Ter Nov 16 18:04:14 -03 2004


Nos manuais do Interbase temos as seguintes informações:

. os valores possíveis para os tipos numéricos do Interbase/Firebird:
SmallInt => de -32,768 até 32,767
Integer => de -2,147,483,648 até 2,147,483,647
INT64 => de -9,223,372,036,854,775,808 até 9,223,372,036,854,775,807 (não
está nos manuais, pesquisei na web, se estiver errado podem corrigir)
Float => de 1.175 x 10 elevado -38 até 3.402 x 10 elevado 38
Double Precision => de 2.225 x 10 elevado -308 até 1.797 x 10 elevado 308

. como o Interbase/Firebase armazena internamente os tipos NUMERIC e DECIMAL
dependendo do dialeto utilizado e da PRECISÃO:
Precisão -> Dialect 1 -> Dialect 3
de 1 a 4 -> SMALLINT para tipo NUMERIC e INTEGER para tipo DECIMAL ->
SMALLINT para ambos
5 a 9 -> INTEGER -> INTEGER
10 a 18 -> DOUBLE PRECISION -> INT64

Exemplos:
Declaração -> Tipo Interno
NUMERIC -> INTEGER
NUMERIC(4) -> SMALLINT
NUMERIC(9) -> INTEGER
NUMERIC(10) -> DOUBLE PRECISION no dialect1 e INT64 no dialect 3
NUMERIC(4,2) -> SMALLINT
NUMERIC(9,3) -> INTEGER
NUMERIC(10,4) -> DOUBLE PRECISION no dialect1 e INT64 no dialect 3

De acordo com essa informação, sua declaração NUMERIC(5,2) utilizando a
PRECISÃO 5 faz o Interbase/Firebase armazenar internamente como INTEGER e
como a ESCALA é 2, ele vai dividir por 100 o número armazenado na hora de
retornar os dados. Por isso o valor máximo, no seu exemplo, foi
21.474.836,47 ou seja 2,147,483,647 (valor máximo para um tipo INTEGER)
dividido por 100!!!

O Interbase/Firebase utiliza 3 faixas (1 a 4, 5 a 9 e 10 a 18) para definir
como vai ser o armazenamento interno e os limites mínimos e máximos não
estão ligados à definição da PRECISÃO E ESCALA, mas sim aos limites dos
tipos de dados internos. Por isso a discrepância...

Sendo assim, o que pode ser entendido é que os tipos NUMERIC e DECIMAL são
apenas "máscaras", pois são implementações sobre os tipos de dados
"verdadeiros".

Pergunta: os outros SGBD tem também esse tipo de "problema"? Alguém poderia
dar alguma informação a respeito disso?

[]s
Carlos Sato


"André" <colosso0 em yahoo.com.br> escreveu na
mensagem news:20041114115458.70193.qmail em web61005.mail.yahoo.com...
> Oi Pessoal,
>
> É o seguinte: Desisti de entender como funciona os
> campos NUMERIC(x,y). Em todos os sites todo mundo fala
> que x especifica a qtde de digitos (isso e uma
> mentira). Acho que todo mundo copia de um site e cola
> no outro.
> Tanto é mentira que um campo NUMERIC(5,2) suporta até
> 21474836,47  (Aqui temos 11 digitos). Entao se alguem
> souber me dar uma explicacao convincente ficaria muito
> grato...
>
> No entanto caso nao saibam gostaria de saber qual tipo
> de dados vc´s utilizam - vou pela maioria :-)
>
> Mais uma vez, conto com a colaboracao de todos e
> agradeco antecipadamente
>
> Andre
>
>
>
> __________________________________
> Do you Yahoo!?
> Check out the new Yahoo! Front Page.
> www.yahoo.com
>
>
>
>


----------------------------------------------------------------------------
----


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br







Mais detalhes sobre a lista de discussão lista