![]() |
Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
Hallo, ich hätt da gern mal wieder ein Problem ;).
Gegeben sind zwei Zahlen, die zu einer Dezimalzahl zusammengesetzt werden sollen. Die eine Zahl ist festgelegt als 1, die andere ist frei definierbar. Beispiele:
Wichtiger ist aber die Frage, wie ich die Sache in Code umsetze. Bisher hab ich dies zusammengestöpselt:
Delphi-Quellcode:
Es wird also die Anzahl der Stellen von Zahl2 gezählt und Zahl2 durch 10 hoch AnzahlStellen geteilt und am Ende 1 hinzuaddiert. Das funktioniert auch einwandfrei, aber geht das irgendwie einfacher?
var
Zahl2: integer; Lsizescalingfactor: Double; Ldigits: integer; begin Ldigits:= CountDigits(Zahl2); Lsizescalingfactor:= 1 + (Zahl2 / IntPower(10, Ldigits)); Grüße Dalai |
AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
Nimm doch einfach Zahl1 + Zahl2/10.
Oder verstehe ich das falsch? |
AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
Wie wäre es mit:
Delphi-Quellcode:
WriteLn(('1.' + Zahl2.ToString()).ToDouble);
|
AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
Zitat:
Zum eigentlichen Problem: Wenns jetzt keine Hausaufgaben sind die auf ne bestimmte Weise gelöst werden sollen würd ich einfach
Delphi-Quellcode:
StrToFloat(IntToStr(Zahl1) + ',' + IntToStr(Zahl2))
machen. Nicht elegant, aber erfüllt seinen Zweck |
AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
... oder bei beliebiger erster Integerzahl:
Delphi-Quellcode:
VAR
Int_1, Int_2: Integer; Dezimal: Double; Begin Dezimal:= (Int_1.ToString + '.' + Int_2.ToString).ToDouble; |
AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
Mathematische Lösung:
Delphi-Quellcode:
uses
Math; function NumbersToFloat(N1, N2: Integer): Double; begin Result := N1 + N2 / Power(10, Floor(Log10(N2) + 1)); end; |
AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
Ich weiß ja jetzt nicht, wie CountDigits implementiert ist, aber man kann das auch gleich mit der Berechnung verbinden:
Delphi-Quellcode:
procedure Main;
var zahl2: Double; begin for var I in TArray<Integer>.Create(55, 9999, 0, 123456789) do begin zahl2 := I; while zahl2 >= 1.0 do zahl2 := zahl2/10; zahl2 := zahl2 + 1.0; Writeln(Format('%g', [zahl2], TFormatSettings.Invariant)); end; end; |
AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
Kann die zweite Zahl auch führende Nullen haben, so dass das gewünschte Ergebnis etwas wie "1,00042" wäre? Dann würden sämtliche Ansätze, die Zahl2 als Integer behandeln (und nicht als String) schief laufen. Nur so ein Gedanke. :wink:
|
AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
Technisch gesehn, entspricht das doch ganz grob in etwa dem, wie Delphi der Computer die Fließkommazahlen speichert.
![]() |
AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
Zitat:
Zitat:
Uwes Code hat für mich am meisten Charme. Einfacher und verständlicher Code :thumb:. Dankeschön! Die Funktion CountDigits hab ich von hier: ![]() Grüße Dalai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:04 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 by Thomas Breitkreuz