Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Kann nicht mit Komma rechnen. Wie geht das?
origin - Mo 23.08.10 08:56
Titel: Kann nicht mit Komma rechnen. Wie geht das?
Hallo zusammen,
wie kann man eingetlich z.B. zwei Werte mit Komma berechnen?
Wie z.B. sowas:
0,03 * 0,9
Herausgefunden habe ich, dass ich Ganzzahlen per Integer berechnen kann.
Doch wie muss ich sowas einfaches bei Werten mit Komma schreiben? Stehe aufm Schlauch. :autsch:
Hier mal mein einfaches Listing:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var zahl1, zahl2, ergebnis: integer; begin zahl1:=StrToInt(Edit1.Text); zahl2:=StrToInt(Edit2.Text); ergebnis:=zahl1*zahl2; Label1.Caption:=IntToStr(ergebnis); end;
end. |
Bin für Eure Hilfe sehr dankbar.
Moderiert von
Narses: Delphi-Tags hinzugefügtModeriert von
Narses: Topic aus Dateizugriff verschoben am Mo 23.08.2010 um 09:15
uko - Mo 23.08.10 09:06
Schau Dir mal den Datentyp Double an bzw. StrToFloat
Grüße,
Uli
jasocul - Mo 23.08.10 09:06
Zunächst mal wären Delphi-Tags für den Source-Code nicht schlecht.
Zu deiner Frage:
Du musst auch einen passenden Typ für deine Vriablen verwenden. Integer geht nur für ganzzahlige Werte. Nimm statt Integer mal Double. Dann sollte es funktionieren.
Allerdings benötigst du Werte mit einem Dezimalpunkt, statt eines Komma. Also bei der Eingabe aufpassen. :wink:
origin - Mo 23.08.10 09:30
Hm, freue mich über Eure Hilfe,
doch wie muss ich das Schreiben mit dem "double"?
Hab da kein Plan.
StrToDouble oder wie?
uko - Mo 23.08.10 09:45
Die Hilfe ist dein Freund! :wink: Im Prinzip geht es genau wie bei Integer nur halt mit Double und StrToFloat.
origin - Mo 23.08.10 09:48
Hm, grübel grübel. :gruebel:
---
Moderiert von
Narses: Beiträge zusammengefasst---
Sorry aber ich komme da so nicht weiter.
Kann mir jemand listen wie sowas aussehen soll?
Danke
mkinzler - Mo 23.08.10 10:05
Besser
StrToFloatDef() oder
TryStToFloat()
Delphi-Quelltext
1:
| zahl1:=StrToFloatDef(Edit1.Text, 0); |
platzwart - Mo 23.08.10 11:08
Delphi-Quelltext
1: 2: 3:
| var meineGanzZahl: Integer; meineKommaZahl: Double; |
origin - Mo 23.08.10 11:14
Finds ja echt lieb aber ich raffs net.
Habs so versucht. Geht net:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); var zahl1, zahl2, ergebnis: Float; begin zahl1:=StrToFloatDef(Edit1.Text, 0); zahl2:=StrToFloatDef(Edit2.Text, 0); ergebnis:=zahl1+zahl2; Label1.Caption:=StrToFloatDef(ergebnis); end; |
Vielleicht kann mir jemand meinen oben geposteten Code so verändern, dass ich mal sehe, wie man so was schreiben muss, damit mein minirechner da funzt. Danke.
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
mkinzler - Mo 23.08.10 11:16
Delphi-Quelltext
1:
| Label1.Caption:=FloatToStr(ergebnis); |
Horschdware - Mo 23.08.10 11:17
Ich denke, du solltest dich erst einmal mit den Grundlagen von Delphi vertraut machen. Da gibt es einige nette Bücher mit denen man das ratz fatz lernt.
Zum konkreten Problem:
zahl1, zahl2 und ergebnis sind vom Typ Float.
Die Ausgabe in Label1.Caption ist wie der Text der Edit Felder vom Typ String.
StrToFloat wandelt wie der Name erahnen lässt von String nach Float um.
Folglich musst du das Gleiche zur Ausgabe rückwärts machen, sprich: FloatToStr.
Hilft dir das weiter?
origin - Mo 23.08.10 11:27
Ahhhhhhaaa ! :idea:
Jetzt hat geschnackelt und gefunzt.
Der Tipp war sehr hilfreich.
Vielen lieben Dank.
---
Moderiert von
Narses: Beiträge zusammengefasst---
Doch eine Frage ist doch noch offen.
Wie kann ich das machen, damit die Ausgabe eine GANZZAHL ist?
Vermutlich mit StrToInt??? Nur wie genau?
Stundenplan - Mo 23.08.10 13:30
Round() oder Trunc() wäre eine Möglichkeit!
Hidden - Mo 23.08.10 13:39
Moin!
Runden mit Round(kaufmännisch); Ceil(aufrunden); Trunc(abrunden), RoundTo(kaufmännisch, auf n Stellen).
Die ersten drei geben dir einen Wert des Typs Integer zurück, hier muss also wieder IntToStr genommen werden - nicht FloatToStr.
Für Ceil und RoundTo musst du die Unit Math einbinden(uses Math; zu Beginn des Interface- oder Implementation-Teils).
lg,
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!