Olá!
Na internet encontro várias páginas explicando sobre o tipo NUMBER, porém não consigo entendê-lo na prática.
NUMBER(n,m) : onde n é a quantidade de dígitos (antes e depois da vírgula) e m é a quantidade de dígitos após a virgula.
Porém se eu tenho NUMBER(3,2) e tento inserir (92.9) dá erro. Mas não tenho exatamente 3 dígitos no total?
Se tenho NUMBER(3,2) e tento inserir (2.2333333333333333333333333) dá certo. Mas não posso ter só 3 dígitos?
Se tenho NUMBER(2,2) e tento inserir (1.1) dá erro. Mas não tenho exatamente dois dígitos?
Alguém pode me explicar melhor isso?
Datatype NUMBER(n,m)
-
- Rank: Programador Júnior
- Mensagens: 20
- Registrado em: Ter, 19 Jul 2011 5:50 pm
- Localização: Jataí - GO
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Olá Vinivios, vou tentar lhe esplanar sobre o tipo Number.
Isto esta corretoNUMBER(n,m) : onde n é a quantidade de dígitos (antes e depois da vírgula) e m é a quantidade de dígitos após a virgula.
Sim, o total é 3 digitos, mas segundo sua especificação você OBRIGATORIAMENTE tem 2 digitos decimais e apenas 1 inteiro.Porém se eu tenho NUMBER(3,2) e tento inserir (92.9) dá erro. Mas não tenho exatamente 3 dígitos no total?
Experimente ler o que foi consolidado no banco. Mesmo você inserindo 500 digitos decimais, o valor sera arredondado para apenas 2 decimais.Se tenho NUMBER(3,2) e tento inserir (2.2333333333333333333333333) dá certo. Mas não posso ter só 3 dígitos?
Se tenho NUMBER(2,2) e tento inserir (1.1) dá erro. Mas não tenho exatamente dois dígitos?Novamente, não é apenas o valor total de digitos que importa e sim a obrigatoriedade de decimais. Se você especificar "2,2" você nunca teria numeros inteiros apenas 2 decimais. Para inserir 1.1 deveria estar especificado Number (2,1).
Conseguiu entender?
-
- Rank: Programador Júnior
- Mensagens: 20
- Registrado em: Ter, 19 Jul 2011 5:50 pm
- Localização: Jataí - GO
Vamos ver se eu entendi:
Quando você disse "Se você especificar "2,2" você nunca teria numeros inteiros apenas 2 decimais", quis dizer que vou ter dois digitos, mas os dois seriam decimais. Exemplo (0.33). Certo?
Quando você disse "Para inserir 1.1 deveria estar especificado Number (2,1)", quis dizer que 1.1 são dois digitos sendo que um é decimal, logo (2,1). Certo?
Quando você disse "segundo sua especificação você OBRIGATORIAMENTE tem 2 digitos decimais e apenas 1 inteiro". Quer dizer que se o campo é (3,2) devo ter 3 dígitos, mas dois devem obrigatóriamente ser decimais?
Se for assim é estranho porque no campo (3,2) eu deveria ter 2 dígitos decimais, mas se eu inserir apenas o valor (2) sem decimais, dá certo.
Quando você disse "Se você especificar "2,2" você nunca teria numeros inteiros apenas 2 decimais", quis dizer que vou ter dois digitos, mas os dois seriam decimais. Exemplo (0.33). Certo?
Quando você disse "Para inserir 1.1 deveria estar especificado Number (2,1)", quis dizer que 1.1 são dois digitos sendo que um é decimal, logo (2,1). Certo?
Quando você disse "segundo sua especificação você OBRIGATORIAMENTE tem 2 digitos decimais e apenas 1 inteiro". Quer dizer que se o campo é (3,2) devo ter 3 dígitos, mas dois devem obrigatóriamente ser decimais?
Se for assim é estranho porque no campo (3,2) eu deveria ter 2 dígitos decimais, mas se eu inserir apenas o valor (2) sem decimais, dá certo.
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
quando você insere 2 em um campo (3,2), o banco 2,00 no banco.Se for assim é estranho porque no campo (3,2) eu deveria ter 2 dígitos decimais, mas se eu inserir apenas o valor (2) sem decimais, dá certo.
-
- Rank: Programador Júnior
- Mensagens: 20
- Registrado em: Ter, 19 Jul 2011 5:50 pm
- Localização: Jataí - GO
Gfkauer, e para essa situação NUMBER(n, -m). Sabe me dizer como funciona esse m negativo?
Vi que se eu criar um campo NUMBER(5,-2) e inserir (1056.34), o oracle registra 1100. Sabe porque?
Vi que se eu criar um campo NUMBER(5,-2) e inserir (1056.34), o oracle registra 1100. Sabe porque?
-
- Rank: DBA Pleno
- Mensagens: 232
- Registrado em: Sex, 30 Mar 2007 7:26 pm
- Localização: Londrina - PR
Rafael O. Genaro
O valor negativo arredonda a parte inteira do número para o valor mais próximo do valor / 10^|m|.
Para m = -2, como no seu exemplo, o número é arredondado para o valor mais próximo divisível por 100.
Para m = 5, seria o valor mais próximo do número divisível por 10.000.
Para m = -2, como no seu exemplo, o número é arredondado para o valor mais próximo divisível por 100.
Para m = 5, seria o valor mais próximo do número divisível por 10.000.
-
- Rank: Programador Júnior
- Mensagens: 20
- Registrado em: Ter, 19 Jul 2011 5:50 pm
- Localização: Jataí - GO
Rafael, eu entendi a questão do arredondamento, porém como fica a questão da quantidade de dígitos?
Para NUMBER(5,3) eu só posso ter um valor com dois dígitos antes da vírgula e três dígitos depois da vírgula. Ex: 12.345.
Para NUMBER(5,-3), não deveria aceitar apenas um valor com 5 dígitos também? Se eu tentar inserir (12345678.26) ele registra (12346000) com 8 dígitos.
Obrigado.
Para NUMBER(5,3) eu só posso ter um valor com dois dígitos antes da vírgula e três dígitos depois da vírgula. Ex: 12.345.
Para NUMBER(5,-3), não deveria aceitar apenas um valor com 5 dígitos também? Se eu tentar inserir (12345678.26) ele registra (12346000) com 8 dígitos.
Obrigado.
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Na realidade o 5 tem a ver com precisão.
Se você usar NUMBER(5,-3) com o número 12345678.26 ele te mostra 12345000.
Se você for pensar, isso só gasta 5 dígitos e não 8. Veja:
12345000 = 12345*10^3
É mais ou menos isso que ele faz.
NUMBER(x,y) == Sendo x a quantidade de dígitos que ele vai guardar. O outro indica em que "faixa" será usado...
Este conceito se aprende em matemática discreta. Toda calculadora trabalha dessa forma. As calculadoras só mostram 8 digitios, mas elas conseguem calcular valores com até 99 casas decimais.. Normalmente, o resultado fica 1.123432E30, indicando que é 1.2345*10^30.
Se você usar NUMBER(5,-3) com o número 12345678.26 ele te mostra 12345000.
Se você for pensar, isso só gasta 5 dígitos e não 8. Veja:
12345000 = 12345*10^3
É mais ou menos isso que ele faz.
NUMBER(x,y) == Sendo x a quantidade de dígitos que ele vai guardar. O outro indica em que "faixa" será usado...
Este conceito se aprende em matemática discreta. Toda calculadora trabalha dessa forma. As calculadoras só mostram 8 digitios, mas elas conseguem calcular valores com até 99 casas decimais.. Normalmente, o resultado fica 1.123432E30, indicando que é 1.2345*10^30.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes