Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Kann man den Wertebereich eingrenzen ? (https://www.delphipraxis.net/194086-kann-man-den-wertebereich-eingrenzen.html)

M3g0n 16. Okt 2017 13:49

Kann man den Wertebereich eingrenzen ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Zusammen,

also ich bin dabei einen Taschenrechner zu Programmieren und verwende dazu double Werte. Natürlich hat double auch nur einen bestimmten Wertebereich und da wollte ich mal nach hören ob man im programm das irgdenwie angeben kann...Denn sonst kommt bei einer zu hohen Zahl so ein ergebnis raus:
Anhang 48016
und das soll es eben nicht...
Deshalb hab ich die frage ob man den eingegrenzten Wertebereich irgendwie angeben kann, das wenn die Zahl zu groß oder zu klein ist eine Fehlermeldung erscheint und die Zahl automatisch auf null gesetzt wird...Bei Integern ist mir das ganze klar...Aber bei einem double ist das für mich ein großes Problem.

Liebe Grüße und schon mal danke im Vorraus
M3g0n

TiGü 16. Okt 2017 14:04

AW: Kann man den Wertebereich eingrenzen ?
 
Das nennt sich Bedingungen. Du kannst das über eine if-Abfrage lösen.
Schaue mal hier auf Seite 31, Kapitel 3.4.2. Bedingungen:
https://downloads.delphi-treff.de/DelphiStarter.pdf

M3g0n 16. Okt 2017 14:10

AW: Kann man den Wertebereich eingrenzen ?
 
Schon mal dankeschön für diese schnelle und liebe Antwort. Aber das mit der Bedinung ist mir bewusst..meine frage ist wie ich das mit einem double in eine Bedinung rein bringen soll....da der Wertebereich ja 5.0*10^-324 .. 1.7*10^308 beträgt...

nahpets 16. Okt 2017 14:24

AW: Kann man den Wertebereich eingrenzen ?
 
Du schaust halt mal, bis zu welchem Wert Du mit Deiner Routine korrekt arbeiten kannst und fragst den an geeigneter Stelle im Programm ab.
Delphi-Quellcode:
const
  Maximalwert: Double = 100000000; // als Beispiel

var
  Eingabe : Double;

  // an geeignetet Stelle:
  if Eingabe > MaxDouble then begin
    MessageDlg(Format('Der Eingabewert %f übersteigt den zulässigen Maximalwert von %f.',[Eingabe,Maximalwert]),mtError,[mbOk],0);
  end else begin
    // Beliebige Berechnung, Verarbeitung, Ausgabe ...
  end;

TiGü 16. Okt 2017 14:32

AW: Kann man den Wertebereich eingrenzen ?
 
Achso, deine Frage ist aber auch etwas unpräzise.
Dafür gibt es Konstanten in der Unit Math.
Schaue dir an wie sie in der Unit definiert sind und dann weißt du auch wie man Double-Zahlen mit Exponentialschreibweise in Delphi definiert.

Delphi-Quellcode:
program Project3;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Math;

var
  YourNumber : Double;

begin
  try
    YourNumber := (Random * Random) / Random;

    if (YourNumber < System.Math.MaxDouble) and (YourNumber > System.Math.MinDouble) then
    begin
      // make magic
       Writeln(YourNumber);
    end else
      YourNumber := 0;

    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

M3g0n 16. Okt 2017 15:01

AW: Kann man den Wertebereich eingrenzen ?
 
Dankeschön euch Zwei :) das hat mir wirklich sehr geholfen und habs hinbekommen.

Glados 16. Okt 2017 21:19

AW: Kann man den Wertebereich eingrenzen ?
 
Er hats zwar herausgefunden, aber ich denke er suchte nicht den Max-Wert von Double sondern den Wert, ab dem der Kram mit E25 an die Zahl gehängt wurde.

TRomano 17. Okt 2017 09:07

AW: Kann man den Wertebereich eingrenzen ?
 
Nun ja, man jann natürlich auch in einem Taschenrechner, wenn das jeweilige Result extra gespeichert wird, eine bessere Darstellung "erzwingen".
Beispiel:

Delphi-Quellcode:
procedure TMainForm.btnFormatClick(Sender: TObject);
const fDouble : Double = 10000000.2356;
      iFactor : Int32  = 10000000000;
begin
  MemoLogs.Lines.Add(' ');
  MemoLogs.Lines.Add(' Test Output long doubles ...');
  MemoLogs.Lines.Add(' ');
  MemoLogs.Lines.Add(FloatToStr(fDouble*iFactor));
  MemoLogs.Lines.Add(Format('%28.4n',[fDouble*iFactor]));
end;
ergibt Output (hier in ein TMemo):

Test Output long doubles ...

1,41006544122114E16
14.100.654.412.211.410,0000

Zu mindestens kann man die Zahl besser erkennen.

gammatester 17. Okt 2017 09:37

AW: Kann man den Wertebereich eingrenzen ?
 
Zitat:

Zitat von TRomano (Beitrag 1383479)
Test Output long doubles ...

1,41006544122114E16
14.100.654.412.211.410,0000

Zu mindestens kann man die Zahl besser erkennen.

Was nützen besser erkennbare Zahlen, wenn sie falsch sind? Woher hast Du denn die Ausgabe gezaubert? Bei mir ist 10000000.2356*10000000000 = 100000002356000000.0000 = 1.00000002356e17;

TRomano 17. Okt 2017 11:33

AW: Kann man den Wertebereich eingrenzen ?
 
Siehe Quelltext. Da muss ich noch mal nachschauen, wieso der Wert mit 1.4... anfängt. Hatte gerade auf diesem Notebook das Delphi gelöscht, um auch da Tokyo zu installieren. Kann es also gerade nicht nachvollziehen.

Es ging nicht um eine Verbesserung der Lesbarkeit an sich, sondern das Vermeiden der wissenschaftlichen/techn. Darstellung des Double.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 Uhr.
Seite 1 von 2  1 2   

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