AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Zwei Ganzzahlen zu Dezimalzahl zusammensetzen
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei Ganzzahlen zu Dezimalzahl zusammensetzen

Ein Thema von Dalai · begonnen am 28. Sep 2023 · letzter Beitrag vom 28. Sep 2023
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#1

Zwei Ganzzahlen zu Dezimalzahl zusammensetzen

  Alt 28. Sep 2023, 14:03
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:
Zahl1Zahl2Ergebnis
1551,55
199991,9999
101,0
11234567891,123456789
Vereinfacht gesagt soll der zweiten Zahl ein "1," vorangestellt werden. Für diese Operation gibt's bestimmt einen mathematischen Begriff.

Wichtiger ist aber die Frage, wie ich die Sache in Code umsetze. Bisher hab ich dies zusammengestöpselt:
Delphi-Quellcode:
var
  Zahl2: integer;
  Lsizescalingfactor: Double;
  Ldigits: integer;
begin
  Ldigits:= CountDigits(Zahl2);
  Lsizescalingfactor:= 1 + (Zahl2 / IntPower(10, Ldigits));
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?

Grüße
Dalai
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen

  Alt 28. Sep 2023, 14:08
Nimm doch einfach Zahl1 + Zahl2/10.


Oder verstehe ich das falsch?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen

  Alt 28. Sep 2023, 14:14
Wie wäre es mit:
WriteLn(('1.' + Zahl2.ToString()).ToDouble);
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen

  Alt 28. Sep 2023, 14:19
nimm doch einfach zahl1 + zahl2/10.


Oder verstehe ich das falsch?
1 + 55/10 = 1 + 5,5 = 6,5

Zum eigentlichen Problem: Wenns jetzt keine Hausaufgaben sind die auf ne bestimmte Weise gelöst werden sollen würd ich einfach
StrToFloat(IntToStr(Zahl1) + ',' + IntToStr(Zahl2))
machen. Nicht elegant, aber erfüllt seinen Zweck
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (28. Sep 2023 um 14:23 Uhr)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen

  Alt 28. Sep 2023, 14:24
... oder bei beliebiger erster Integerzahl:
Delphi-Quellcode:
VAR
  Int_1, Int_2: Integer;
  Dezimal: Double;

Begin
  Dezimal:= (Int_1.ToString + '.' + Int_2.ToString).ToDouble;
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (28. Sep 2023 um 14:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen

  Alt 28. Sep 2023, 14:26
Mathematische Lösung:
Delphi-Quellcode:
uses
  Math;

function NumbersToFloat(N1, N2: Integer): Double;
begin
  Result := N1 + N2 / Power(10, Floor(Log10(N2) + 1));
end;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#7

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen

  Alt 28. Sep 2023, 14:39
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen

  Alt 28. Sep 2023, 14:52
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.
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#9

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen

  Alt 28. Sep 2023, 14:58
Technisch gesehn, entspricht das doch ganz grob in etwa dem, wie Delphi der Computer die Fließkommazahlen speichert.
https://de.wikipedia.org/wiki/IEEE_754
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#10

AW: Zwei Ganzzahlen zu Dezimalzahl zusammensetzen

  Alt 28. Sep 2023, 15:27
Wenns jetzt keine Hausaufgaben sind die auf ne bestimmte Weise gelöst werden sollen würd ich einfach
StrToFloat(IntToStr(Zahl1) + ',' + IntToStr(Zahl2))
Nein, keine Hausaufgabe. 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.

Kann die zweite Zahl auch führende Nullen haben, so dass das gewünschte Ergebnis etwas wie "1,00042" wäre?
Nein, die Zahlen sind immer Ganzzahlen und als Integer definiert.

Uwes Code hat für mich am meisten Charme. Einfacher und verständlicher Code . Dankeschön! Die Funktion CountDigits hab ich von hier: https://stackoverflow.com/a/30016222

Grüße
Dalai
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:31 Uhr.
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