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

Kelver Merlotti kmerlotti em gmail.com
Ter Jan 12 11:30:30 -03 2010


>Agora só não entendi porque no FB do Wilson o resultado retornou um número
>real. Todos os FB deveriam seguir esse mesmo padrão, não?

Provavelmente o dialeto 1 não é 100% compatível com o padrão SQL.
Abraço!

Kelver Merlotti
Coordenador Editorial do Portal www.ActiveDelphi.com.br
Contato: kelver em activedelphi.com.br
Google: kmerlotti em gmail.com
Twitter: http://twitter.com/kmerlotti
Tem um segundo? Então, dá uma olhadinha nisso:
Um site de publicidades, de Portugal, está pagando em euros (quase 3x
mais que em reais) pra quem estiver disposto a:
 * Ler anúncios
 * Visitar sites
 * Clicar em banners
 * Navegar na NET
 * Ler e-mails
 * Convidar novos usuários
O pagamento pode ser feito de várias formas!
Registra lá. Não custa nada!!! ;-)
http://www.publipt.com/pages/index.php?refid=kmerlotti



2010/1/12 Priscila Lugon <priscila em agriness.com>:
> Valeu Elton, esse texto foi bem explicativo.
>
> Então é por isso que os diversos bancos se comportam diferentes, pois alguns
> aderem ao padrão do SQL mais rigorosamente e outros não. Agora porque todos
> não seguem um mesmo padrão, neh? É só para dificultar mesmo a vida de quem
> está migrando de banco..
>
> Adorei a parte do texto que ele diz: " This can have bizarre results unless
> you are aware of it.".. foi exatamente o que eu pensei, que resultado
> bizarro!!
>
> Mas beleza, pelo menos entendi que a culpa não é do FB, e sim de quem
> escreveu o padrão do SQL.. hehehe..
>
> Agora só não entendi porque no FB do Wilson o resultado retornou um número
> real. Todos os FB deveriam seguir esse mesmo padrão, não?
>
> Att.
>
> Priscila Lugon
> Tecnologia
> ----------------------------------------------------------------------------
> -------------------------------
> AGRINESS – Gestão da Informação para Suinocultura
> www.agriness.com |  + 55 (48) 3028-0015 |   priscila em agriness.com
> ----------------------------------------------------------------------------
> -------------------------------
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
> nome de Elton da Motta Barbosa
> Enviada em: terça-feira, 12 de janeiro de 2010 10:29
> Para: lista em firebase.com.br
> Assunto: [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
>
>
> ______________________________________________
> 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