![]() |
zahl runden
hey
warum sagt mir edit1.text '2' wenn ich den code benutze
Delphi-Quellcode:
ich möchte doch nur die zahl in edit1.text runden auf '2' stellen
var
a,c:string; b:integer; x:extended; begin a:=edit1.text; x:=strtofloat(a); x:= round(2) ; c:=floattostr(x); edit1.Text:=c; un dann wieder in edit1.text ausgeben?! |
Re: zahl runden
Zitat:
Du scheinst das Prinzip der Zuweisung nicht zu verstehen. Der linken Seite wird zugewiesen. Dein Code sagt also nimm die Zahl 2 runde diese und weise sie x zu. |
Re: zahl runden
hm stimmt *g*
wenn ich aber jetzt sage
Delphi-Quellcode:
[Fehler] Unit2.pas(248): E2008 Inkompatible Typen
x:=round(edit1.text)
oder bei anderen buchstaben dennen ich edit1.text zuweiße hm komisch |
Re: zahl runden
Round will ja auch eine Fließkommazahl als Parameter
Delphi-Quellcode:
Wobei TryStrToFloat oder ein try..except Block sinnvoll wäre.
x:=round(StrToFloat(edit1.text));
|
Re: zahl runden
ok danke das funzt
war ich ja knapp dran :cheers: noch ne blöde frage bei 3,45 rundet er ab aber ich will das da dann 4 steht, fragt bitte net warum muss einfach so sein:-D |
Re: zahl runden
x2:=round(x*10) / 10
|
Re: zahl runden
Zitat:
Hä: Das hier: Zitat:
Das will er aber doch gar nicht... So geht das:
Delphi-Quellcode:
mfg
round(zahl+0.5);
|
Re: zahl runden
:arrow: 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 ![]() In Delphi:
Delphi-Quellcode:
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:
var IntKiste: Integer;
begin IntKiste := StrToInt(Edit1.Text); end;
Delphi-Quellcode:
In Delphi sieht das so aus:
Eingabe Ausgabe
--------> AUTOMAT -------->
Delphi-Quellcode:
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.
function <Name des "Automaten"> (Eingaben: Varibalentyp): Ausgabetyp;
Delphi-Quellcode:
übersetzen wir das doch mal in die "Kistensprache"
var
a,c:string; b:integer; x:extended; begin a:=edit1.text; x:=strtofloat(a); x:= round(2) ; c:=floattostr(x); edit1.Text:=c; du hast 4 Kisten. Zwei Stringkisten, eine Ganzzahlkiste und eine Kommazahlkiste.
Delphi-Quellcode:
In die erste Stringkiste tust du den Text des Edits.
var
a,c:string; b:integer; x:extended;
Delphi-Quellcode:
:arrow: Völlig in Ordnung (jedoch nicht nötig wie ich gleich zeigen werde)
a:=edit1.text;
Dann nimmst du ein Werkzeug (= Automat=Funktion), bearbeitest das Objekt in deiner Stringkiste so das es in die Kommazahlkiste passt und tust es darein.
Delphi-Quellcode:
:arrow: 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:
x:=strtofloat(a);
Delphi-Quellcode:
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
x:=strtofloat(Edit1.Text);
// statt a:=edit1.text; x:=strtofloat(a); 2,3564 macht Round eine 2. Aus 2 macht Round auch eine 2. :arrow: 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.
Delphi-Quellcode:
Als nächstes tust du die 2 die mittlerweile in einer Stringkiste liegt in die Stringkiste des Edits.
c:=floattostr(x);
:arrow: 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 :mrgreen: Das ist der kürzeste Weg der dich zum Ziel führt ;) In Delphi:
Delphi-Quellcode:
Oder wenn du aus nem Teller/Glas essen/trinken willst:
begin
Edit1.Text := FloatToStrF(StrToFloat(Edit1.Text),ffNumber,2,2); end;
Delphi-Quellcode:
Solltest du das jetzt alles gelesen haben, müsstest du langsam anfangen zu verstehn wie alles läuft oder ?^^
var
f: Single; begin f := StrToFloat(Edit1.Text); Edit1.Text := FloatToStrF(f,ffNumber,2,2); end; Gruß Neutral General EDIT: Rechtschreib- und Flüchtigkeitsfehler verbessert. |
Re: zahl runden
Zitat:
vllt so:
Delphi-Quellcode:
x2:=round(round(x*10) / 10)
|
Re: zahl runden
Zitat:
Delphi-Quellcode:
x2:=round(x+0.5);
|
Re: zahl runden
ja hab ich
ich muss noch sagen das ich noch nicht so lange in delphi programmier aber des war hamma wie du das erklärt hast vielen dank |
Re: zahl runden
Zitat:
Delphi-Quellcode:
heißen. Hatte eben zuerst
begin
Edit1.Text := FloatToStrF(StrToFloat(Edit1.Text),ffNumber,2,2); end;
Delphi-Quellcode:
da stehn...
begin
Edit1.Text := FloatToStrF(FloatToStr(Edit1.Text),ffNumber,2,2); end; Gruß Neutral General |
Re: zahl runden
ok ok ok
danke @ all aber sry mein prob is noch net gelöst ich will ja wenn 3,45 da steht trozdem das da 4 steht bei 3,5 steht ja 4 :gruebel: |
Re: zahl runden
Zitat:
geht natürlich auch, deine methode wird aber schneller sein :zwinker: |
Re: zahl runden
Hi,
Zur Hilfe:
Delphi-Quellcode:
Gruß
Edit1.Text := IntToStr(Ceil(3.212));
Neutral General |
Re: zahl runden
ok danke
jetzt hab ich´s
Delphi-Quellcode:
x:=round(strtofloat(edit1.text)+0.5);
|
Re: zahl runden
Zitat:
Delphi-Quellcode:
verwenden.
x2 := ceil(x);
Ceil rundet immer auf die nächste zahl auf. Natürlich muss man dabei noch die Unit "math" in die uses-Klausel aufnehmen. |
Re: zahl runden
Die +0,5-Variante haut bei ganzen Zahlen nicht hin: Da wird dann 4 auf 5 gerundet, was wohl nicht Absicht ist.
|
Re: zahl runden
na dann halt +0.05
|
Re: zahl runden
OT: @silver-moon-2000: die Unit math ist für Ceil nicht nötig. Zumindest bei meinem Delphi nicht...
|
Re: zahl runden
Ähem? Ich dacht hier ginge es allgemein ums Aufrunden. Und dann geht es ohne Verzweigung wohl nicht.
|
Re: zahl runden
Zitat:
theoretisch dann +0.49999 aber das is nicht sehr schön, das muss ich wohl zugeben... |
Re: zahl runden
Zitat:
er will ja Round(3,44) -> 3 Round(3,45) -> 4 |
Re: zahl runden
Liste der Anhänge anzeigen (Anzahl: 1)
[OT]
Zitat:
Beispiel: neues Projekt, darin:
Delphi-Quellcode:
Kommt bei mir er Fehler "[Pascal Error] Unit1.pas(27): E2003 Undeclared identifier: 'ceil'"
procedure blubb;
var x, y : integer; begin x := ceil(y); end; Außerdem siehe Anhang. :zwinker: :zwinker: So, jetzt hab ich's Dir aber gegeben [/OT] |
Re: zahl runden
Sorry, du hast Recht, Dominikkv.
Aber die Frage ist auch etwas schwammig formuliert ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 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-2025 by Thomas Breitkreuz