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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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 user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: 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 user profile iconNarses: 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); //Wenn nicht konvertiert werden kann, wird 0 verwendet.                    


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 user profile iconNarses: Ü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 user profile iconNarses: 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,


Dude566 - Mo 23.08.10 15:49

http://christian-stelzmann.de/index_tutorials_crashkurs.html
http://www.delphi-treff.de/object-pascal/variablen-und-konstanten/


elundril - Mo 23.08.10 17:31

Ein Tutorial fehlt noch finde ich: Delphi-Wikibook [http://de.wikibooks.org/wiki/Programmierkurs:_Delphi]