[delphi-br] na REAL, DATEDIFF retorna INT ou FLOAT ??? interessante...

2008-02-05 Por tôpico Flavio
Olá pessoal, bom dia,

esses dias me apareceu uma grande pulga fazendo a festa atrás da minha orelha. 
Resolvi colocar no comando SQL:


SELECT DATEDIFF(DAY,'1984/05/21','2007/04/01')/365

Resultado: 22

...e depois assim:

SELECT 2*DATEDIFF(DAY,'1984/05/21','2007/04/01')/365

Resultado: 45


Como assim? 2 * 22 = 45 ???

Alguém tem uma explicação para esse furo da matemática???


Obrigado pela atenção.
Flávio.

   
-
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento! 

[As partes desta mensagem que não continham texto foram removidas]



Re: [delphi-br] na REAL, DATEDIFF retorna INT ou FLOAT ??? interessante...

2008-02-05 Por tôpico Moacir - GMail
Flavio,

Faça um Cast para integer...

SELECT Cast(DATEDIFF(DAY,'1984/05/21','2007/04/01')/365 as integer)

Resultado: 22


SELECT cast(2*DATEDIFF(DAY,'1984/05/21','2007/04/01')/365 as integer)

Resultado 

[ ]´s
Moacir


Flavio escreveu:
 Olá pessoal, bom dia,

 esses dias me apareceu uma grande pulga fazendo a festa atrás da minha 
 orelha. Resolvi colocar no comando SQL:

 
 SELECT DATEDIFF(DAY,'1984/05/21','2007/04/01')/365

 Resultado: 22

 ...e depois assim:

 SELECT 2*DATEDIFF(DAY,'1984/05/21','2007/04/01')/365

 Resultado: 45
 

 Como assim? 2 * 22 = 45 ???

 Alguém tem uma explicação para esse furo da matemática???


 Obrigado pela atenção.
 Flávio.


 -
 Abra sua conta no Yahoo! Mail, o único sem limite de espaço para 
 armazenamento! 

 [As partes desta mensagem que não continham texto foram removidas]



   


RE: [delphi-br] na REAL, DATEDIFF retorna INT ou FLOAT ??? interessante...

2008-02-05 Por tôpico Rubem Nascimento da Rocha


Se um dos resultados deu 45, tá na cara que o retorno de DATEDIFF() é float. 
Não é exato pq a quantidade real de dias e horas que um ano possui não é 
exatamente 365, e sim 365.25. Até no próprio Delphi o tipo TDateTime é 
declarado como um double(vide help do Delphi).

Mas pq 365.25 dias? Muito simples! Se formos nos recordar das aulas de 
geografia, um ano corresponde a quantidade de dias que a Terra da uma volta 
completa ao redor do sol. Só que não são necessariamente 365 dias, e sim 365 
dias e 6 horas (6 horas = 0.25 dia). Por isso que a cada quatro anos, essas 6 
horas são acumuladas (4 x 6 = 24 horas = 1 dia) para gerar o dia 29 de 
Fevereiro, o famoso ano bissexto.

O outro motivo para que uma data seja representada como float é tb pelo fato 
deste mesmo tipo de dados ser usado para representar horas. Ou seja, um 
determinado período no tempo pode ser representado em um double contendo data e 
hora.

Por isso que é feito o CAST no resultado para um valor inteiro. No momento da 
conversão, é perfeitamente natural e até aceitável que o valor seja arredondado.

Sds.





To: delphi-br@yahoogrupos.com.br
From: [EMAIL PROTECTED]
Date: Tue, 5 Feb 2008 13:29:38 -0200
Subject: Re: [delphi-br] na REAL, DATEDIFF retorna INT ou FLOAT ??? 
interessante...







Flavio,

Faça um Cast para integer...

SELECT Cast(DATEDIFF(DAY,'1984/05/21','2007/04/01')/365 as integer)

Resultado: 22

SELECT cast(2*DATEDIFF(DAY,'1984/05/21','2007/04/01')/365 as integer)

Resultado 

[ ]´s
Moacir

Flavio escreveu:
 Olá pessoal, bom dia,

 esses dias me apareceu uma grande pulga fazendo a festa atrás da minha 
 orelha. Resolvi colocar no comando SQL:

 --
 SELECT DATEDIFF(DAY,'1984/05/21','2007/04/01')/365

 Resultado: 22

 ...e depois assim:

 SELECT 2*DATEDIFF(DAY,'1984/05/21','2007/04/01')/365

 Resultado: 45
 --

 Como assim? 2 * 22 = 45 ???

 Alguém tem uma explicação para esse furo da matemática???


 Obrigado pela atenção.
 Flávio.


 -
 Abra sua conta no Yahoo! Mail, o único sem limite de espaço para 
 armazenamento!

 [As partes desta mensagem que não continham texto foram removidas]












_
Conheça o Windows Live Spaces, a rede de relacionamentos do Messenger!
http://www.amigosdomessenger.com.br/

Re: [delphi-br] na REAL, DATEDIFF retorna INT ou FLOAT ??? interessante...

2008-02-05 Por tôpico Joao Morais
Rubem Nascimento da Rocha wrote:
 O outro motivo para que uma data seja representada como float é tb pelo
 fato deste mesmo tipo de dados ser usado para representar horas. Ou seja,
 um determinado período no tempo pode ser representado em um double
 contendo data e hora.

Este é o único motivo. Ano bissexto é compensado a cada 4 anos (ok, tem 
exceção a cada X anos) e não com 1/4 de dia a cada ano. 1/1/2008 para 
1/1/2009 é 366, e 1/1/2009 para 1/1/2010 é 365.

--
Joao Morais