AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

zahl runden

Ein Thema von MasterTobi · begonnen am 16. Sep 2007 · letzter Beitrag vom 16. Sep 2007
Antwort Antwort
Seite 1 von 3  1 23      
MasterTobi

Registriert seit: 29. Apr 2007
212 Beiträge
 
#1

zahl runden

  Alt 16. Sep 2007, 14:54
hey

warum sagt mir edit1.text '2' wenn ich den code benutze
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;
ich möchte doch nur die zahl in edit1.text runden auf '2' stellen
un dann wieder in edit1.text ausgeben?!
MFG
Tobi
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: zahl runden

  Alt 16. Sep 2007, 14:58
Zitat:
warum sagt mir edit1.text '2' wenn ich den code benutze
Weil du die Zahl 2 rundest.
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.
Markus Kinzler
  Mit Zitat antworten Zitat
MasterTobi

Registriert seit: 29. Apr 2007
212 Beiträge
 
#3

Re: zahl runden

  Alt 16. Sep 2007, 15:07
hm stimmt *g*
wenn ich aber jetzt sage
x:=round(edit1.text) [Fehler] Unit2.pas(248): E2008 Inkompatible Typen
oder bei anderen buchstaben dennen ich edit1.text zuweiße

hm komisch
MFG
Tobi
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: zahl runden

  Alt 16. Sep 2007, 15:08
Round will ja auch eine Fließkommazahl als Parameter
x:=round(StrToFloat(edit1.text)); Wobei TryStrToFloat oder ein try..except Block sinnvoll wäre.
Markus Kinzler
  Mit Zitat antworten Zitat
MasterTobi

Registriert seit: 29. Apr 2007
212 Beiträge
 
#5

Re: zahl runden

  Alt 16. Sep 2007, 15:21
ok danke das funzt
war ich ja knapp dran

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
MFG
Tobi
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: zahl runden

  Alt 16. Sep 2007, 15:23
x2:=round(x*10) / 10
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#7

Re: zahl runden

  Alt 16. Sep 2007, 15:31
Zitat:
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

Hä:

Das hier:

Zitat:
 x2:=round(x*10) / 10
Rundet ja wohl auf der erste nachkommastelle...

Das will er aber doch gar nicht...

So geht das:

round(zahl+0.5); mfg
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  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
 
#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
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#9

Re: zahl runden

  Alt 16. Sep 2007, 15:32
Zitat von inherited:
x2:=round(x*10) / 10
dann kommt aber 3.5 raus^^
vllt so:
x2:=round(round(x*10) / 10)
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#10

Re: zahl runden

  Alt 16. Sep 2007, 15:34
Zitat von dominikkv:
Zitat von inherited:
x2:=round(x*10) / 10
dann kommt aber 3.5 raus^^
vllt so:
x2:=round(round(x*10) / 10)
Ne, nochmal (siehe oben):

x2:=round(x+0.5);
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 16:57 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