/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Mystisk tal i calculated field
Fra : Ukendt


Dato : 05-04-08 21:53

Jeg har opbygget et clientdataset i mit program, hvor der bl.a. er et par
calculated fields.

I et af de calculatede fields kommer der indimellem et spøjst tal ud af
ingenting. Findes der en logisk forklaring på dette? Jeg har lavet et
forenklet eksempel.

Det er i et skatteberegningsprogram.

Jeg har lavet en funktion:

Function BeregnFradragStatAegtefaelle(Gift : integer;
Bundskat,BundskatAF,EgetFradragStat: integer): integer;
begin
If (Gift = 1) and (BundskatAF < (SatsBundskat * SatsFradragStat)) then
Begin
Result := Round((SatsBundskat * SatsFradragStat) - BundskatAF) * -1;
If (Bundskat - (EgetFradragStat * -1) - (Result * -1)) <= 0 then
Result := Bundskat - (EgetFradragStat * -1)
end;

Parameteren "Gift" indikerer, om der er tale om en ugift eller gift person
(ugift = 0 og gift = 1

Når der er tale om gifte personer, er der ikke tale om noget problem.
Resultatet bliver korrekt.

Når der derimod er tale om ugifte, skal resultatet være 0. Men jeg får et
spøjst tal, hvilket jeg ikke forstår idet der jo ikke burde blive foretaget
nogen beregning jvf. første forhindring i koden (If (Gift = 1)



 
 
Ukendt (06-04-2008)
Kommentar
Fra : Ukendt


Dato : 06-04-08 07:11


"Michael Sørensen" <.> skrev i en meddelelse
news:47f7e555$0$27360$ba624c82@nntp06.dk.telia.net...
> Jeg har opbygget et clientdataset i mit program, hvor der bl.a. er et par
> calculated fields.
>
> I et af de calculatede fields kommer der indimellem et spøjst tal ud af
> ingenting. Findes der en logisk forklaring på dette? Jeg har lavet et
> forenklet eksempel.
>
> Det er i et skatteberegningsprogram.
>
> Jeg har lavet en funktion:
>
> Function BeregnFradragStatAegtefaelle(Gift : integer;
> Bundskat,BundskatAF,EgetFradragStat: integer): integer;
> begin
> If (Gift = 1) and (BundskatAF < (SatsBundskat * SatsFradragStat)) then
> Begin
> Result := Round((SatsBundskat * SatsFradragStat) - BundskatAF) * -1;
> If (Bundskat - (EgetFradragStat * -1) - (Result * -1)) <= 0 then
> Result := Bundskat - (EgetFradragStat * -1)
> end;
>
> Parameteren "Gift" indikerer, om der er tale om en ugift eller gift person
> (ugift = 0 og gift = 1
>
> Når der er tale om gifte personer, er der ikke tale om noget problem.
> Resultatet bliver korrekt.
>
> Når der derimod er tale om ugifte, skal resultatet være 0. Men jeg får et
> spøjst tal, hvilket jeg ikke forstår idet der jo ikke burde blive
foretaget
> nogen beregning jvf. første forhindring i koden (If (Gift = 1)
>
Det er ikke smart at poste et forenklet eksempel. Det kunne jo godt være at
du så netop fjerner den fejlbehæftede del.
Jeg ville begynde med at sætte Result til 0. Den bliver jo kun berørt hvis
Gift = 1.

Nico



Ukendt (06-04-2008)
Kommentar
Fra : Ukendt


Dato : 06-04-08 08:54

"Nico de Jong" <nico_at_farumdata_dot_dk> skrev i en meddelelse
news:47f86956$0$2083$edfadb0f@dtext02.news.tele.dk...
>
> "Michael Sørensen" <.> skrev i en meddelelse
> news:47f7e555$0$27360$ba624c82@nntp06.dk.telia.net...
>> Jeg har opbygget et clientdataset i mit program, hvor der bl.a. er et par
>> calculated fields.
>>
>> I et af de calculatede fields kommer der indimellem et spøjst tal ud af
>> ingenting. Findes der en logisk forklaring på dette? Jeg har lavet et
>> forenklet eksempel.
>>
>> Det er i et skatteberegningsprogram.
>>
>> Jeg har lavet en funktion:
>>
>> Function BeregnFradragStatAegtefaelle(Gift : integer;
>> Bundskat,BundskatAF,EgetFradragStat: integer): integer;
>> begin
>> If (Gift = 1) and (BundskatAF < (SatsBundskat * SatsFradragStat)) then
>> Begin
>> Result := Round((SatsBundskat * SatsFradragStat) - BundskatAF)
>> * -1;
>> If (Bundskat - (EgetFradragStat * -1) - (Result * -1)) <= 0 then
>> Result := Bundskat - (EgetFradragStat * -1)
>> end;
>>
>> Parameteren "Gift" indikerer, om der er tale om en ugift eller gift
>> person
>> (ugift = 0 og gift = 1
>>
>> Når der er tale om gifte personer, er der ikke tale om noget problem.
>> Resultatet bliver korrekt.
>>
>> Når der derimod er tale om ugifte, skal resultatet være 0. Men jeg får et
>> spøjst tal, hvilket jeg ikke forstår idet der jo ikke burde blive
> foretaget
>> nogen beregning jvf. første forhindring i koden (If (Gift = 1)
>>
> Det er ikke smart at poste et forenklet eksempel. Det kunne jo godt være
> at
> du så netop fjerner den fejlbehæftede del.
> Jeg ville begynde med at sætte Result til 0. Den bliver jo kun berørt hvis
> Gift = 1.

Hej Nico.

Min fejl. Jeg ville starte med det forenklede eksempel, men endte med at
copy/paste den reelle kode alligevel, så det var en fejl, at jeg glemte at
fjerne det "forenklede eksempel" i teksten.

Jeg troede ikke, at det var nødvendigt, at sætte result := 0 idet jeg
formoede, at resultatet altid ville starte med at være 0 - i hvert fald når
jeg ikke har angivet en værdi tidligere.



Ukendt (06-04-2008)
Kommentar
Fra : Ukendt


Dato : 06-04-08 10:06


"Michael Sørensen" <.> skrev i en meddelelse
news:47f8818f$0$4451$ba624c82@nntp02.dk.telia.net...
> "Nico de Jong" <nico_at_farumdata_dot_dk> skrev i en meddelelse
> news:47f86956$0$2083$edfadb0f@dtext02.news.tele.dk...
> >
> > "Michael Sørensen" <.> skrev i en meddelelse
> > news:47f7e555$0$27360$ba624c82@nntp06.dk.telia.net...
> >> Jeg har opbygget et clientdataset i mit program, hvor der bl.a. er et
par
> >> calculated fields.
> >>
> >> I et af de calculatede fields kommer der indimellem et spøjst tal ud af
> >> ingenting. Findes der en logisk forklaring på dette? Jeg har lavet et
> >> forenklet eksempel.
> >>
> >> Det er i et skatteberegningsprogram.
> >>
> >> Jeg har lavet en funktion:
> >>
> >> Function BeregnFradragStatAegtefaelle(Gift : integer;
> >> Bundskat,BundskatAF,EgetFradragStat: integer): integer;
> >> begin
> >> If (Gift = 1) and (BundskatAF < (SatsBundskat * SatsFradragStat))
then
> >> Begin
> >> Result := Round((SatsBundskat * SatsFradragStat) - BundskatAF)
> >> * -1;
> >> If (Bundskat - (EgetFradragStat * -1) - (Result * -1)) <= 0 then
> >> Result := Bundskat - (EgetFradragStat * -1)
> >> end;
> >>
> >> Parameteren "Gift" indikerer, om der er tale om en ugift eller gift
> >> person
> >> (ugift = 0 og gift = 1
> >>
> >> Når der er tale om gifte personer, er der ikke tale om noget problem.
> >> Resultatet bliver korrekt.
> >>
> >> Når der derimod er tale om ugifte, skal resultatet være 0. Men jeg får
et
> >> spøjst tal, hvilket jeg ikke forstår idet der jo ikke burde blive
> > foretaget
> >> nogen beregning jvf. første forhindring i koden (If (Gift = 1)
> >>
> > Det er ikke smart at poste et forenklet eksempel. Det kunne jo godt være
> > at
> > du så netop fjerner den fejlbehæftede del.
> > Jeg ville begynde med at sætte Result til 0. Den bliver jo kun berørt
hvis
> > Gift = 1.
>
> Hej Nico.
>
> Min fejl. Jeg ville starte med det forenklede eksempel, men endte med at
> copy/paste den reelle kode alligevel, så det var en fejl, at jeg glemte at
> fjerne det "forenklede eksempel" i teksten.
>
> Jeg troede ikke, at det var nødvendigt, at sætte result := 0 idet jeg
> formoede, at resultatet altid ville starte med at være 0 - i hvert fald
når
> jeg ikke har angivet en værdi tidligere.
>
I mine næsten 40 år som programmør, har jeg lært at man aldrig skal antage
noget. Det kan godt være at den version man lige nu bruger initierer alt ved
starten, men det er absolut ikke sikker at den næste version også gør det.
At initiere ting selv, gør også at man har et større/bedre overblik.
Hjælp det iøvrigt at sætte Result til 0 ?

MvH

Nico



Ukendt (07-04-2008)
Kommentar
Fra : Ukendt


Dato : 07-04-08 19:24

"Nico de Jong" <nico_at_farumdata_dot_dk> skrev i en meddelelse
news:47f89245$0$2111$edfadb0f@dtext02.news.tele.dk...

Hej Nico.

>> Min fejl. Jeg ville starte med det forenklede eksempel, men endte med at
>> copy/paste den reelle kode alligevel, så det var en fejl, at jeg glemte
>> at
>> fjerne det "forenklede eksempel" i teksten.
>>
>> Jeg troede ikke, at det var nødvendigt, at sætte result := 0 idet jeg
>> formoede, at resultatet altid ville starte med at være 0 - i hvert fald
> når
>> jeg ikke har angivet en værdi tidligere.
>>
> I mine næsten 40 år som programmør, har jeg lært at man aldrig skal antage
> noget. Det kan godt være at den version man lige nu bruger initierer alt
> ved
> starten, men det er absolut ikke sikker at den næste version også gør det.
> At initiere ting selv, gør også at man har et større/bedre overblik.

Det har jeg forståelse for. Jeg har dog stadig ikke forståelse for, hvor
Delphi får "tallet" fra, når den ikk einitierer ved start.

> Hjælp det iøvrigt at sætte Result til 0 ?

Ja, det hjalp. Endnu engang tak for hjælpen.



Hauge (07-04-2008)
Kommentar
Fra : Hauge


Dato : 07-04-08 19:40

Hej
Michael Sørensen wrote:
> Det har jeg forståelse for. Jeg har dog stadig ikke forståelse for,
> hvor Delphi får "tallet" fra, når den ikk einitierer ved start.

Der reserveres jo et lille stykke hukommelse til den variabel som du laver
under "var", og når du ikke selv initierer den med en værdi, så antager den
jo den værdi som hukommelsen var da den blev reserveret. Pladsen har jo
været brugt før. Det er nu godt at hukommelsen i computeren ikke er èngangs


Mvh hauge



Søg
Reklame
Statistik
Spørgsmål : 177422
Tips : 31962
Nyheder : 719565
Indlæg : 6407886
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste