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

Marcelo Geyer estanisgeyer em gmail.com
Ter Jan 12 11:12:16 -03 2010


E isso é o correto. Divisão entre inteiros deve retornar um inteiro.
Postei em mensagem anterior explicando isso.

Abraços,

Marcelo E. Geyer

2010/1/12 Elton da Motta Barbosa <embarbosa em gmail.com>

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



-- 
Marcelo E. Geyer
Standard Net Tecnologia e Informação



Mais detalhes sobre a lista de discussão lista