Valores em tempo de Debug

14/12/2005

5

Fiz o debug na rotina abaixo,

**********************************************************
var
cDataAtual: TDateTime;
cAnoA, cMesA, cDiaA: Word;
cTotDia, cDiaAtu, cMesAtu, cDiaPer, cMultiplo, cMedDiv: single;

begin
inherited;
CDSConsFalta.Open;
cCommandText_Original := SDSConsFalta.CommandText;
bbtnok.SetFocus;

cDataAtual := Now;
DecodeDate(cDataAtual, cAnoA, cMesA, cDiaA);
cMultiplo := 0.01;

cMesAtu := cMesA - 1;
if cMesAtu = 0 then
cMesAtu := 1;

cTotDia := 30;
if cDiaA > cTotDia then
cTotDia := cDiaA;

// Transforma o dia em percentual abaixo de 1 - (1 equivale a 100¬)
cDiaPer := cDiaA * 100 / cTotDia * cMultiplo;

cMedDiv := cMesAtu + cDiaPer;
***********************************************************
a rotina funciona blz, só fico com uma duvida, em tempo de debug, a medida que o cursor do mouse é posicionado em cima das variaveis, aparece o valor delas como se fosse o Hint, ok.
Fazendo os calculos na calculadora dá um valor e na tela aparece outro.
Exemplo: cDiaA = 14
cTotDia = 30
cMultiplo = .01
cMesAtu = 11

Calculando conforme formula acima o resultado na calculadora dá:
cMedDiv = 11.4666667
na tela do debug tenho
cMedDiv = 2,1754084073e-32

Se alguém puder me dar uma orientação fico grato.
[/img]


Responder

Posts

14/12/2005

Edilcimar

não seria problema com parênteses?


Responder
a rotina acaba aí?

[b:dfe1ca3e74]cMedDiv := cMesAtu + cDiaPer;[/b:dfe1ca3e74]

se acabar nessa linha, creio que o valor 2,1754084073e-32 esteja sendo exibido porque a variável cMedDiv não é usada em nenhum lugar abaixo dessa linha. para evitar desperdício de recursos, o Delphi simplesmente ignora o conteúdo dessa variável. agora faça um uso qualquer e você verá que o valor não será esse. ponha uma última linha assim:

showmessage(floattostr(cMedDiv));

e debugue novamente. você verá que os valores estarão corretos.


Responder

14/12/2005

Tida

Creio que não seria o problema dos parenteses, pois experimentei colocalos e a resposta que antes era

cMedDiv = 2,1754084073e-32

com os parenteses ficou

cMedDiv = 5,8537753262e-36

talvez o erro esteja no tipo de variável que estou usando, o fator preponderante do calculo é o cMultiplo que está como single pois o mesmo deve conter o valor de 0.01
Não sei quais os tipos de variáveis que posso usar para numeros com decimal.


Responder

14/12/2005

Tida

Oi emerson

a rotina não acaba ali, apenas mostrei até onde eu debuguei, mas vou testar sua dica obrigado.


Responder

14/12/2005

Tida

Só ratificando

valeu emerson, mostrando na tela veio o valor correto, sabes porque o delphi faz isso?


Responder
a rotina acaba aí? [b:192d3c63cc]cMedDiv := cMesAtu + cDiaPer;[/b:192d3c63cc] se acabar nessa linha, creio que o valor 2,1754084073e-32 esteja sendo exibido porque a variável cMedDiv não é usada em nenhum lugar abaixo dessa linha. para evitar desperdício de recursos, o Delphi simplesmente ignora o conteúdo dessa variável. agora faça um uso qualquer e você verá que o valor não será esse. ponha uma última linha assim: showmessage(floattostr(cMedDiv)); e debugue novamente. você verá que os valores estarão corretos.


como eu disse, o Delphi faz de tudo para economizar recursos.
provavelmente a variável [i:192d3c63cc]cMedDiv[/i:192d3c63cc] não é utilizada depois daquela atribuição, então se a variável não é utilizada, o Delphi ignora seu valor.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira