[firebase-br] Operador de Divisão - Qual o problema?

Chico chicote em vsp.com.br
Ter Jan 12 10:42:14 -03 2010


Qual é o correto?
Ele só pega a parte inteira ou arredonda o resultado para baixo?
Francisco


----- Original Message ----- 
From: "Elton da Motta Barbosa" <embarbosa em gmail.com>
To: <lista em firebase.com.br>
Sent: Tuesday, January 12, 2010 10:29 AM
Subject: [firebase-br] Operador de Divisão - Qual o problema?


>Pessoal,
>Vejam o seguinte SQL:
>select 1/2 from RDB$DATABASE
>O resultado que o Firebird me retorna é “0”, sendo que o certo era retornar
>“0.5”.
>Porque o Firebird retorna errado? O operador de divisão só pega a  parte
>inteira da divisão?
>Obrigada,

>Priscila Lugon
>Tecnologia

Olá,

Isso é um padrão SQL. O QuickStart guide do Firebird explica sobre
isso nas páginas 22 e 23 (na versão do FB 2.0).
Extraí de lá veja:

*Firebird SQL*
Every database management system has its own idiosyncrasies in the
ways it implements SQL. Firebird adheres to the SQL standard more
rigorously than most other RDBMSes. Developers migrating from products
that are less standards-compliant often wrongly suppose that Firebird
is quirky, whereas many of its apparent quirks are not quirky at all.

*Division of an integer by an integer*
Firebird accords with the SQL standard by truncating the result
(quotient) of an integer/integer calculation to the next lower
integer. This can have bizarre results unless you are aware of it.
For example, this calculation is correct in SQL:
1 / 3 = 0
If you are upgrading from an RDBMS which resolves integer/integer
division to a float quotient, you will need to alter any affected
expressions to use a float or scaled numeric type for either dividend,
divisor, or both.
For example, the calculation above could be modified thus in order to
produce a non-zero result:
1.000 / 3 = 0.333

tradução livre, quase google... =]

* Firebird SQL *
Cada sistema de gerenciamento de banco de dados tem suas próprias
idiossincrasias na maneira que implementa SQL. Firebird adere ao
padrão SQL de forma mais rigorosa do que a maioria dos outros RDBMSs.
Desenvolvedores que migram de produtos que são normas menos
complacentes, muitas vezes erroneamente supõe que o Firebird é
equivocado, ao passo que muitos de seus aparentes caprichos não são
tão equivocados assim.

* Divisão de um número inteiro por um número inteiro *
O Firebird concordemente com o padrão SQL trunca o resultado
(quociente) de um cálculo  inteiro / inteiro para o número inteiro
imediatamente inferior. Isso pode ter resultados bizarros a menos que
você esteja ciente disso.
Por exemplo, este cálculo está correto em SQL:
1 / 3 = 0
Se você estiver atualizando a partir de um RDBMS que resolve inteiro /
divisão inteira de um quociente de flutuação, você vai precisar
alterar quaisquer expressões afetadas usar um float ou escalados para
qualquer tipo numérico dividendo, divisor, ou ambos.
Por exemplo, o cálculo acima poderia ser modificada, assim, a fim de
produzir um resultado diferente de zero:
1,000 / 3 = 0,333

Como você pode imaginar, isso já deu dor de cabeça pra um bocado de gente ;)

abraços,

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 





Mais detalhes sobre a lista de discussão lista