AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Float in zwei Integer zerlegen

Ein Thema von Shark99 · begonnen am 19. Jun 2015 · letzter Beitrag vom 21. Jun 2015
Antwort Antwort
hathor
(Gast)

n/a Beiträge
 
#1

AW: Float in zwei Integer zerlegen

  Alt 20. Jun 2015, 14:43
Ich möchte eine Gleitzahl in zwei Integer zerlegen.

Vorkomma und Nachkomma sollen jeweils zwei Integer bilden. Später will ich das ganze zusammensetzen.
Lösungen wurden schon gezeigt - hier eine Zusammenfassung:

Delphi-Quellcode:
procedure MM(s:string); begin Form1.Memo1.Lines.Add(s); end;

Function LDOUBLE(d:Double):INTEGER;
begin
  Result:= TRUNC(d);
//evtl. Zahl verschlüsseln
end;

Function RDOUBLE(d:Double):INTEGER;
begin
  Result:= TRUNC(FRAC(d) * 24 * 60 * 60 * 1000);
//evtl. Zahl verschlüsseln
end;

Function INTINTDOUBLE(a, b : INTEGER): DOUBLE;
begin
// evtl. Zahlen a und b vorher entschlüsseln
  Result:= a + (b / 24 / 60 / 60 / 1000);
end;

procedure TForm1.Button6Click(Sender: TObject);
var a, b : INTEGER;
begin
MM(DATETIMETOSTR(now));

a:= LDOUBLE(now);
b:= RDOUBLE(now);
MM('LDOUBLE: '+INTTOSTR(a));
MM('RDOUBLE: '+INTTOSTR(b));

MM('Date: '+DATETOSTR(INTINTDOUBLE(a,b)));
MM('Time: '+TIMETOSTR(INTINTDOUBLE(a,b)));
MM('ReCombined: '+DATETIMETOSTR(INTINTDOUBLE(a,b)));
end;

Geändert von hathor (21. Jun 2015 um 09:36 Uhr)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#2

AW: Float in zwei Integer zerlegen

  Alt 20. Jun 2015, 15:48
Lösungen wurden schon gezeigt - hier eine Zusammenfassung:
Wenn dann doch schon so:
Delphi-Quellcode:
procedure MM(s:string; AMemo: TMemo); begin AMemo.Lines.Add(s); end;

function LDOUBLE(d:Double):INTEGER;
begin
  Result := TRUNC(d);
end;

function RDOUBLE(d:Double):INTEGER;
begin
  Result := TRUNC(FRAC(d) * 24 * 60 * 60 * 1000);
end;

function INTINTDOUBLE(a, b : INTEGER): DOUBLE;
begin
  Result := a + (b / 24 / 60 / 60 / 1000);
end;

procedure TForm1.Button6Click(Sender: TObject);
var a, b : INTEGER;
begin
  MM(DATETIMETOSTR(now),Self.Memo1);

  a := LDOUBLE(now);
  b := RDOUBLE(now);
  MM('LDOUBLE: '+INTTOSTR(a),Self.Memo1);
  MM('RDOUBLE: '+INTTOSTR(b),Self.Memo1);

  MM('Date: '+DATETOSTR(INTINTDOUBLE(a,b)),Self.Memo1);
  MM('Time: '+TIMETOSTR(INTINTDOUBLE(a,b)),Self.Memo1);
  MM('ReCombined: '+DATETIMETOSTR(INTINTDOUBLE(a,b)),Self.Memo1);
end;
Wir wollen ja keine Instanzen der Form verärgern.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Float in zwei Integer zerlegen

  Alt 20. Jun 2015, 16:05
Oder du benutzt:

Delphi-Quellcode:
function DateTimeToFileDate(DateTime: TDateTime): Integer;
//Delphi Datum (Double) in Betriebsystem Zeitstempel (Integer)
um Delphi-Datum in ein Integer zu konvertieren.

Zurück geht es so:

Delphi-Quellcode:
function FileDateToDateTime(FileDate: Integer): TDateTime;
//Betriebsystem Zeitstempel (Integer) in Delphi Datum (Double)
Einschränkungen:
Der Zeitstempel fängt 01.01.1980 an, Delphi-Datum dagegen 01.01.1900. Die Funktionen berücksichtigen das, so dass man nichts selbst dazurechnen oder abziehen muss, aber es sind keine Daten möglich die kleiner 1980 sind.

Weitere Einschränkungen: es werden keine Millisekunden gesichert. Und zuallerletzt, ich habe das Gefühl, dass irgendwer hier pfuscht und nicht jede Sekunde gespeichert wird, sondern jede zweite Sekunde. Vielleicht weil man so ein Bit spart.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:50 Uhr.
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