Thema: Delphi zahl runden

Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

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

Re: zahl runden

  Alt 16. Sep 2007, 15:32
stell dir das ganze so vor:

auf der linke Seite vom ':=' hast du eine Kiste. In diese Kiste kannst du was reintun. Es gibt verschiedene Arten von Kisten. Zum Beispiel welche in die nur Strings reinpassen und andere in die nur ganze Zahlen (Integers) reinpassen. In andere passen auch Kommazahlen (Real, Single, Double, Extended) rein. Wenn was in eine Kiste rein soll das eigentlich nicht reinpasst musst du es passend machen.

Beispiel: Du hast eine Integer (Ganzzahlen) Kiste. Und willst die "Zahl" reintun die in einem Edit drinsteht. Dann musst du während du die Zahl ausm Edit darein tust erst den String so bearbeiten das er in die Integer-Kiste passt. Dazu kramst du in deiner Werkzeugkiste und findest Delphi-Referenz durchsuchenStrToInt.

In Delphi:

Delphi-Quellcode:
var IntKiste: Integer;
begin
  IntKiste := StrToInt(Edit1.Text);
end;
Diese Werkzeuge sind Funktionen. Eine Funktion gibt immer etwas zurück. Funktionen sind sowas wie Automaten. Man gibt was bestimmtes rein (nicht alles passt in den Eingang. Ähnlich wie bei den Kisten) und der Automat/Die Funktion macht was damit und gibt was raus:
Delphi-Quellcode:
Eingabe Ausgabe
--------> AUTOMAT -------->
In Delphi sieht das so aus:

function <Name des "Automaten"> (Eingaben: Varibalentyp): Ausgabetyp; Das gehört vielleicht jetzt nicht alles zur Beantwortung deiner Frage aber vielleicht verstehst du jetzt son bisschen wie das Prinzip von Delphi und eigentlich allen (höheren) Programmiersprachen ist.

Delphi-Quellcode:
var
  a,c:string;
  b:integer;
  x:extended;
begin
  a:=edit1.text;
  x:=strtofloat(a);
  x:= round(2) ;
  c:=floattostr(x);
  edit1.Text:=c;
übersetzen wir das doch mal in die "Kistensprache"

du hast 4 Kisten. Zwei Stringkisten, eine Ganzzahlkiste und eine Kommazahlkiste.

Delphi-Quellcode:
var
  a,c:string;
  b:integer;
  x:extended;
In die erste Stringkiste tust du den Text des Edits.

a:=edit1.text; Völlig in Ordnung (jedoch nicht nötig wie ich gleich zeigen werde)

Dann nimmst du ein Werkzeug (= Automat=Funktion), bearbeitest das Objekt in deiner Stringkiste so das es in die Kommazahlkiste passt und tust es darein.

x:=strtofloat(a); Auch in Ordnung aber schüttest du Wasser bevor du es in den Kochtopf tust nochmal extra vorher in ein anderes Gefäß und schüttest dann um? Was ich sagen will: Es GEHT auch direkter. Das ist kein Zwang aber es ist schneller und praktischer:

Delphi-Quellcode:
x:=strtofloat(Edit1.Text);

// statt

a:=edit1.text;
x:=strtofloat(a);
Dann nimmst du die Kommazahlkiste in die du eben (über einen Umweg) die Zahl ausm Edit reingetan hast und tust da eine gerundete 2 rein. Denn Round ist ein Werkzeug das aus einer (Kommazahl) eine Ganzzahl macht. Das heißt aus
2,3564 macht Round eine 2. Aus 2 macht Round auch eine 2.

Mit dieser Zeile werden alle vorherigen Schritte, die ja korrekt waren, sinnlos gemacht. Das ist als hättest du Wasser in eine Schüssel getan, das Wasser in den Kochtopf getan, das Wasser im Kochtopf ausgeschüttet und in den Kochtopf Salz reingeschüttet.

Jetzt nimmst du die (gerundete) 2 die du eben in die Kommazahlkiste getan hast und bearbeitest sie so das sie in eine Stringkiste passt und tust sie in eine Stringkiste.

c:=floattostr(x); Als nächstes tust du die 2 die mittlerweile in einer Stringkiste liegt in die Stringkiste des Edits.
Die 2 wird angezeigt.

Den ganzen Vorgang in Kochtopfsprache:
Du füllst Wasser in ein Gefäß, gießt das Wasser aus dem Gefäß in den Kochtopf. Schüttest das Wasser aus dem Kochtopf in den Abfluss und tust gleichzeitig Salz rein. Das Salz aus dem Kochtopf tust du auf nen Teller und isst es dann.

Hört sich bescheuert an oder?^^

Wie wärs wenn dus so machst:

Du trinkst das wasser während du es mit dem Salzstreuer salzt

Das ist der kürzeste Weg der dich zum Ziel führt

In Delphi:
Delphi-Quellcode:
begin
  Edit1.Text := FloatToStrF(StrToFloat(Edit1.Text),ffNumber,2,2);
end;
Oder wenn du aus nem Teller/Glas essen/trinken willst:

Delphi-Quellcode:
var
 f: Single;
begin
 f := StrToFloat(Edit1.Text);
 Edit1.Text := FloatToStrF(f,ffNumber,2,2);
end;
Solltest du das jetzt alles gelesen haben, müsstest du langsam anfangen zu verstehn wie alles läuft oder ?^^

Gruß
Neutral General

EDIT: Rechtschreib- und Flüchtigkeitsfehler verbessert.
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