Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Kalenderwochen Funktion Falsch? (https://www.delphipraxis.net/104498-kalenderwochen-funktion-falsch.html)

Amateurprofi 7. Jan 2010 20:07

Re: Kalenderwochen Funktion Falsch?
 
Zitat:

Zitat von x000x
Moin moin,

Zitat:

Zitat von Daniel G
...Ich bräucht einen Beweis, welche der beiden Varianten nun richtig ist...

Ich versuche es mal...

Vom übergebenen Datum interessiert ja nur der Datumteil, also die Stellen vor dem Komma.
Ob ich nun z.B. 40184 durch y teile oder 40184.xxxxx durch y, die Vorkommastellen vom Ergebnis bleiben gleich.
Und da bei
Delphi-Quellcode:
((A +8 -Day) - EncodeDate(Y, 1, 1)) / 7
nur unser übergebenes Datum Nachkommastellen haben könnte,
können wir auch bei dem Ergebnis den Nachkommaanteil ignorieren.

Also reicht es, das Round durch Trunc zu ersetzen, wie du schon im Beitrag #8 geschrieben hast.

Vielleicht versuchst du es noch einmal.
Die Nachkommastellen dürfen keinesfalls einfach ignoriert werden - es sei denn man legt Wert auf Fehler.

Amateurprofi 7. Jan 2010 20:28

Re: Kalenderwochen Funktion Falsch?
 
Zitat:

Zitat von mkinzler
Zitat:

Danke. Smile Denn ich kann immer noch nicht nachvollziehen, warum es nun wichtig sein soll, 0.5 dazuzuaddieren. Grübelnd...
Wäre sogar falsch, denn dann wäre aber Mittag der nächste Tag.

Nein. Es wäre falsch, ein Trunc durchzuführen, ohne vorher 0.5 zu addieren.

Ich hab mal in die Funktion die Zwischenwerte eingefügt, da wird dann wohl jedem klar, daß ein simples Trunc nicht ausreicht.

Aufruf : XWeekOfDate(EncodeDate(2009,01,01));

Delphi-Quellcode:
function xWeekOfDate(A: TDateTime): Integer;
var
  Day: Integer;
  Y,M,D: Word;
  n:extended;
begin
  A := Int(A); // A=39814
  Day := DayOfWeek(A) -1; // Day=4
  if Day <= 0 then Day := 7; // Day=4
  DecodeDate(A +4 -Day, Y, M, D); // Y=2009
  Result := Trunc(((A +8 -Day) - EncodeDate(Y, 1, 1)) / 7); // Result = 0
  // A+8-Day = 39818
  // EncodeDate(Y,1,1) = 39814
  // (A+8-Day)-EncodeDate(Y,1,1) = 4
  // ((A+8-Day)-EncodeDate(Y,1,1))/7 = 0.5714285713
  // Result = Trunc(0.5714285713)
  // Result = 0
  Result := Trunc(0.5+((A +8 -Day) - EncodeDate(Y, 1, 1)) / 7); // Result = 1
  // Result = Trunc(0.5 + 0.5714285713)
  // Result = Trunc(1.0714285713)
  // Result = 1
end;
Ein Trunc (ohne vorher 0.5 zu addieren) würde als Resultat 0 ergeben.
Ein Trunc (bei vorheriger addition von 0.5) ergibt das korrekte Resultat 1.

Im Stillen habe ich gehofft, daß negaH mal ein paar Kommentare abgibt - scheint ihm wohl zu albern zu sein.
Übrigens @negaH : eine sehr elegante Lösung hast da gefunden.

Es wäre schön, wenn alle, die so oft "aus der Hüfte geschossene" Kommentare abgeben, vorher prüfen, ob das, was sie schreiben wollen auch korrekt ist.

Mithrandir 7. Jan 2010 20:40

Re: Kalenderwochen Funktion Falsch?
 
Zitat:

Zitat von Amateurprofi
Im Stillen habe ich gehofft, daß negaH mal ein paar Kommentare abgibt - scheint ihm wohl zu albern zu sein.

Hagen ist schlichtweg nicht mehr sooft in der DP unterwegs, da er mit Delphi nicht mehr soviel am Hut hat, wie er selbst mal geschrieben hat. ;)

Im Übrigen sollte man innerhalb von 24 Stunden den http://www.delphipraxis.net/template.../icon_edit.gif-Button nutzen, wenn man noch etwas hinzufügen möchte. ;)

Amateurprofi 7. Jan 2010 23:44

Re: Kalenderwochen Funktion Falsch?
 
Zitat:

Zitat von Daniel G
Zitat:

Zitat von Amateurprofi
Im Stillen habe ich gehofft, daß negaH mal ein paar Kommentare abgibt - scheint ihm wohl zu albern zu sein.

Hagen ist schlichtweg nicht mehr sooft in der DP unterwegs, da er mit Delphi nicht mehr soviel am Hut hat, wie er selbst mal geschrieben hat. ;)

Im Übrigen sollte man innerhalb von 24 Stunden den http://www.delphipraxis.net/template.../icon_edit.gif-Button nutzen, wenn man noch etwas hinzufügen möchte. ;)

Danke für den Hinweis bezüglich Edit-Button. Aber ich habe im Momeent nicht vor noch etwas hinzuzufügen.
Falls sich der Hinweis darauf bezieht, daß ich kurz hintereinander zwei Beiträge geschrieben habe : Ich hab das ganz bewußt in zwei Beiträge gepackt, weil ich auf zwei Beiträge von zwei Usern reagiert habe.

x000x 8. Jan 2010 01:21

Re: Kalenderwochen Funktion Falsch?
 
Moin moin,

@Klaus: :thumb:

Zitat:

Zitat von Amateurprofi
...
Es wäre schön, wenn alle, die so oft "aus der Hüfte geschossene" Kommentare abgeben, vorher prüfen, ob das, was sie schreiben wollen auch korrekt ist.

Ich gebe dir Recht, nur war ich wirklich überzeugt, dass meine Aussage bezüglich der "nachkommastellenignoranz" korrekt war
(warum auch immer). Ich hätte wohl erstmal versuchen sollen, den dahinter liegenden Algo zu verstehen :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz