Autor |
Beitrag |
inv_pacemaker
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 13.02.04 10:08
Moin Leute,
habe mal einige Fragen zu Delphi:
1. Wie kann ich mehere Variablen in einem Feld ausgeben:
Das wäre meine Vorgehensweise nach TurboPASCAL Art:
edit1.text:= (',var1,', ',var2,');
Aber so klappt es leider nicht, vielleicht kann mir ja Jemand sagen, wei ich mehere Variablen in ein Feld bekomme.
2. Wie kann ich die nachkomma Stellen eines Strings, ... begrenzen
Beispiel TP:
writeln(var1:2:0); // Zwei Stellen OHNE Komma
genau diese Ausgabe brauche ich auch in Delphi.
So das wärs erstmal, wenn ihr mir damit helfen könntet wäre ich euch sehr verbunden.
Danke in Voraus
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Fr 13.02.04 10:13
2 Variablen machst du so:
Delphi-Quelltext 1:
| Edit1.Text := var1 + var2; |
Mit den Kommastellen wirst du dir die rundungsfunktionen mal anguggn müssen... (jedenfalls hat ein STRING keine kommastellen)
aber erstmal  im DF!
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
inv_pacemaker 
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 13.02.04 10:19
Angenommen var1 ist 10
var2 ist 5 groß
und ich benutze dann die Funktion
Delphi-Quelltext 1:
| edit1.text:= var1 + var2 |
ist edit1.text dann 15 oder 105
Weill es soll ja 105 sein, er soll sie nicht zusammenrechnen sondern 'hintereinander' ausgeben.
Rundungsfunktion uist schlecht, ich will nicht runden die Kommastelle soll einfach nicht ausgegeben werden, wenn ich runde stimmt in dem Falle das ERgebnis nicht mehr.
P.S:Danke fürs Welcome
Gruss
Moderiert von Klabautermann: Delphi-Tags hinzugefügt.
|
|
patrick
      
Beiträge: 1481
WIN2k, WIN XP
D6 Personal, D2005 PE
|
Verfasst: Fr 13.02.04 10:34
kommt darauf an was für vaiablentypen du benutzt.
wenn du die variablen als string deklarierst werden die zeichen hintereinander angefügt ( du verbindest also die beiden zeichenketten).
wenn du jedoch integer (also als nummerische variable) denk delphi du willst die beiden addieren und es kommt 15 raus.
_________________ Patrick
im zweifelsfall immer das richtige tun!!!
|
|
inv_pacemaker 
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 13.02.04 10:51
Ich muss aber mit Integer bzw real Werten arbeiten, ansonsten kann ich nicht rechnen.
Oder kann ich das irgendwie noch umwandeln?
edit:
Delphi-Quelltext 1:
| edit7.Text:= floattostr(ergeb1 + ergeb2); |
So macht er doch nen String draus odeR? aber er zeigt mir als ergebnis die 15 ned die 105
Moderiert von Klabautermann: Delphi-Tags hinzugefügt.
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Fr 13.02.04 10:57
dann mach:
Delphi-Quelltext 1:
| edit7.Text:= floattostr(ergeb1) + floattostr(ergeb2); |
so macht er jede zahl zu einem "eigenen" string und hängt diese an einander... bei integer geht auch IntToStr
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
inv_pacemaker 
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 13.02.04 11:00
alles klar das funzt.
Nur wie mache ich das jetzt, das er nur höchstens 3 Stellen VOR dem Komma anzeigt, und die Stellen NACH dem Komma ausblendet?
Wenn ich das noch weiss ist es perfekt.
|
|
AndreM
      
Beiträge: 122
Win2k, WinXP, Suse 10
D7 Ent
|
Verfasst: Fr 13.02.04 11:31
Um deine Nachkommastellen zu realisieren guck dir mal die Funktion FormatFloat an!
Hier mal der Delphi-Funktionskopf!
Delphi-Quelltext 1:
| function FormatFloat(const Format: string; Value: Extended): string; |
|
|
inv_pacemaker 
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 13.02.04 11:56
wennich das einfüge läuft das gesamte Prog nicht merh...
Ey ich kann das garnicht verstehen, dass so schwer ist, die Nachkommastellen nicht auszugeben....
In anderen Programmiersprachen ist das docha uch ganz einfach..
Naja vllt. weiss ja nocih einer was..
|
|
AndreM
      
Beiträge: 122
Win2k, WinXP, Suse 10
D7 Ent
|
Verfasst: Fr 13.02.04 12:33
Das ist in Delphi auch nicht schwer, wenn man es mal verstanden hat!
Hier mal nen kleines Beispiel. Ist jedoch nicht getestet, dürfe jedoch klappen!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm_Haupt.Button_SendClick(Sender: TObject); var wert_formatiert : string; wert, wert1, wert2 : single; begin wert1 := 100,34; wert2 := 86,99; wert := wert1 + wert2; wert_formatiert:= PChar(FormatFloat('####',wert)); end; |
in wert_formatiert ist nun das Ergebnis aus wert1 + wert2 abzüglich der Nachkommastellen gespeichert.
Wenn du z.B. möchest das dein Ergebnis immer als Währung, also mit 2 Nachkommanstellen ausgegeben werden soll müßtest du folgenden Code verwenden.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm_Haupt.Button_SendClick(Sender: TObject); var wert_formatiert : string; wert, wert1, wert2 : single; begin wert1 := 100,34; wert2 := 86,99; wert := wert1 + wert2; wert_formatiert:= PChar(FormatFloat('####,00',wert)); end; |
Hoffe das dir das ein wenig weiterhilft.
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Fr 13.02.04 12:38
Hallo und  ,
zuerst möchte ich dich biten in zukünftigen Codes die Delphi Tags zu nuten, das geht so:
Quelltext 1:
| [delphi]Dein Quelltext[/delphi] |
Dadurch wird das ganze übersichtlicher.
inv_pacemaker hat folgendes geschrieben: | Ey ich kann das garnicht verstehen, dass so schwer ist, die Nachkommastellen nicht auszugeben.... |
Zu deinem Problem: Es gibt viel möglichkeiten den Nachkommawert los zu werden. Die gänigsten sind Trunc und Round. Trunc schnedet die nachkommastellen einfach ab und Round rundet sie nache dem Amerikanischen "Banker’s Rounding" verfahren, nicht zu verwechseln mit unseren Kaufmännischen runden. Das ergebnis vom Typ Integer musst du noch in einen String Konvertieren, damit du es ausgeben kannst. Dafür kannst du IntToStr verwenden.
Anwenden kannst du die Befehle so:
Delphi-Quelltext 1:
| edit1.text := IntToStr(Trunc(var1 + var2)); |
bzw.
Delphi-Quelltext 1:
| edit1.text := IntToStr(Round(var1 + var2)); |
//Edit: Der Befehl format ist flexibler als das ober vorgestellte FormatFloat ein Blick in die Delphi Hilfe lohnt sich.
Gruß
Klabautermann
|
|
inv_pacemaker 
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 13.02.04 13:45
Jo alles klar benutze das jetzt. Deine Round funktion funzt astrein.
Bin soweit zufrieden mit meinem PRog, wenn cih noch was habe melde ich mich 
|
|
inv_pacemaker 
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 13.02.04 14:35
Noch eine Sache:
Kann ich das irgendwie machen, dass er mir ein ERgebnis immer auf zwei Stellen ausgibt
Also wenn ein Ergebnis 3 ist, dass er denn 03 augibt, aber bei einer Zwestelligen, soll er sie auch nur zweistellig ausgeben
Ist doch sicher möglich oder.
Danke nochmal für eure ganzen Antworten
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Fr 13.02.04 15:10
Wenn dus mit Strings lösen willst:
Delphi-Quelltext 1:
| if Length(ergebnis) = 1 then ergebnis := '0' + ergebnis; |
Bei den Format Funktionen weiss ich nicht obs geht...
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
inv_pacemaker 
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 13.02.04 15:38
Delphi-Quelltext 1:
| if Length (floattostr(ergeb2)) = 1 then (floattostr(ergeb2)) := '0' + (floattostr(ergeb2)); |
[Fehler] koordinaten.pas(69): Der linken Seite kann nichts zugewiesen werden
Und so:
Delphi-Quelltext 1:
| if Length(ergeb2) = 1 then ergeb2 := '0' + ergeb2; |
[Fehler] koordinaten.pas(69): Inkompatible Typen
Die Variable ergeb2 ist als real definiert.
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Fr 13.02.04 15:46
Chatfix hat folgendes geschrieben: | Wenn dus mit Strings lösen willst |
Real ist kein String....
Wenn du es im Edit ausgibst könntest du es so machen
Delphi-Quelltext 1:
| if Length(Edit1.Text) = 1 then ... |
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Fr 13.02.04 15:55
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Fr 13.02.04 17:42
Hallo,
wenn du Ergebnisse als Formatieten Text Ausgeben willst, dann solltest du die funktion Format benutzen.
Hier kannst du solche angaben im Format String (in der Delphi Hilfe nachschlagen) einstellen.
Dass kann dann so aussehen:
Delphi-Quelltext 1:
| Label1.Caption := Format('%.2d', [Round(var1 + var2)]); |
Hierbei sind die Eckigen Klammern wichtig.
Gruß
Klabautermann
Zuletzt bearbeitet von Klabautermann am Fr 13.02.04 18:09, insgesamt 1-mal bearbeitet
|
|
rokdd
      
Beiträge: 329
Win XP
D6
|
Verfasst: Fr 13.02.04 18:00
Hallo,
zu dem 1.problem mit dem umwandeln kannst du dir auch mal die function floattostrf anschauen damit wandelst du den float um und gibst gleichzeitig noch dezimalstellen,... an.
Rokdd
|
|
inv_pacemaker 
Hält's aus hier
Beiträge: 11
|
Verfasst: Sa 14.02.04 16:35
Jo danke nochmal für die weiteren Antworten, aber ich habe das Problem anders gelöst.
Habs einfach mit editX.Text gemacht...
Der Sinn daran, dass da immer eine '0' stehen sollte lag darin, dass das Ergebnis dieses Programms eine Angabe in Minuten und Sekunden ist, d.h. wenn als Ergenis 7, 5, 9 rausgkommt soll er ja 07:05:09 ausgeben.
Logisch oder  ?
Gruss
pacemaker
|
|