Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Zwei Ganzzahlen zu Dezimalzahl zusammensetzen (https://www.delphipraxis.net/213807-zwei-ganzzahlen-zu-dezimalzahl-zusammensetzen.html)

himitsu 28. Sep 2023 14:32

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
 
Zitat:

Zitat von Dalai (Beitrag 1527501)
aber das Problem ist ja immer die Abhängigkeit vom im System eingestellten Dezimaltrennzeichen. Daher hab ich das gleich verworfen,

Entweder abfragen, welches Zeichen das aktuell ist
Delphi-Referenz durchsuchenFormatSettings.DecimalSeparator

oder der Funktion das Zeichen mitgeben, welches verwendet werden soll.
Delphi-Referenz durchsuchenStrToFloat + Delphi-Referenz durchsuchenTFormatSettings

Neutral General 28. Sep 2023 14:36

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
 
Zitat:

Zitat von Dalai (Beitrag 1527501)
Die Umwandlung mittels String kam mir auch in den Sinn, aber das Problem ist ja immer die Abhängigkeit vom im System eingestellten Dezimaltrennzeichen. Daher hab ich das gleich verworfen, auch wenn der Weg über Strings den Vorteil hätte, dass Zahl2 führende Nullen haben kann und damit ein Ergebnis wie 1,005 möglich ist. Das ist aber aktuell keine Voraussetzung.

Delphi-Quellcode:
StrToFloat(IntToStr(Zahl1) + FormatSettings.DecimalSeparator + IntToStr(Zahl2))


Edit: Ups nicht gesehn dass himitsu schneller war

Uwe Raabe 28. Sep 2023 14:55

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
 
Das mit den führenden Nullen ist unter der Annahme, dass zahl2 ein Integer ist, eh nicht möglich. Dazu müsste zahl2 schon als string vorliegen.

dummzeuch 28. Sep 2023 17:37

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
 
Zitat:

Zitat von Dalai (Beitrag 1527501)
das Problem ist ja immer die Abhängigkeit vom im System eingestellten Dezimaltrennzeichen. Daher hab ich das gleich verworfen, auch wenn der Weg über Strings den Vorteil hätte, dass Zahl2 führende Nullen haben kann und damit ein Ergebnis wie 1,005 möglich ist. Das ist aber aktuell keine Voraussetzung.

Delphi-Quellcode:
function Combine(_Zahl1, _Zahl2: integer): Double;
var
  err: integer;
begin
  Val(Format('%d.%d', [_Zahl1, _Zahl2]), Result, err);
end;
oder wenn die Zahlen als Strings eingelesen werden (also führende Nullen möglich sind):

Delphi-Quellcode:
function Combine(const _Zahl1, _Zahl2: string): Double;
var
  err: integer;
begin
  Val(Format('%s.%s', [Zahl1, Zahl2]), Result, err);
end;
Funktioniert unabhängig vom Dezimaltrennzeichen.

Dalai 28. Sep 2023 18:51

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
 
Mittlerweile hab ich die selbst gestellte Aufgabe ganz anders gelöst, so dass gar kein Faktor mehr errechnet werden muss. Ich hätte wohl gleich über die Problematik gezielter und intensiver nachdenken sollen. Naja, hinterher ist man immer schlauer :).

Nur der Vollständigkeit halber:
Das Ziel war, Dateigrößen zu errechnen, die beim Codieren von (binären) Dateien entstehen, ohne die eigentliche Codierung durchzuführen (weil rechen- und damit zeitintensiv). Zu Beginn dachte ich, die üblichen 33% bis 37% reichen dafür nicht aus, denn meine Tests ergaben 41-43% größere Dateien. Dann fiel mir auf, dass diese Base64 codierten Dateien noch einen Header und Footer haben. Inzwischen hab ich einen brauchbaren Algorithmus gefunden, der im Maximum einen 2 Byte zu kleinen Wert ergibt, in der Mehrzahl der Fälle aber korrekt ist. Das ist für den Zweck akzeptabel.

Anyway, danke an alle Beteiligten für die Denkanstöße! :dp:.

Grüße
Dalai


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 Uhr.
Seite 2 von 2     12   

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