![]() |
Variable als Float definieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo liebe Community,
das ist mein erster Post und ich habe ein Problem: Ich will einen Währungsumrechner erstellen. Dafür geb ich jeder Währung einen Wert, der für ihn steht, aber mein Problem ist, dass man (meiner Erkenntnissen nach) Variablen nicht mit Float angeben kann (Die Wärungen haben einen Komma-Wert). Dann habe ich probiert, die Zahlen einfach zu erhöhen (alle * 100000), um keine Komma-Zahlen zu bekommen. Da ergab sich aber das Problem, dass die Ergebnisse keine Nachkommastellen hatten. :| Hier ist der Code:
Delphi-Quellcode:
Und noch andere Währungen (Das ist nur das Schema).
unit mWaehrungen;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons, Mask, Grids; type TFWaehrungen = class(TForm) ImHintergrund: TImage; Bt1AusD: TBitBtn; Bt1Euro: TBitBtn; Bt1Fr: TBitBtn; Bt1KanD: TBitBtn; Bt1Peso: TBitBtn; Bt1Pfund: TBitBtn; Bt1Real: TBitBtn; Bt1USD: TBitBtn; Bt1Yen: TBitBtn; Bt1Yuan: TBitBtn; Bt1Zlo: TBitBtn; Bt2AusD: TBitBtn; Bt2Euro: TBitBtn; Bt2Fr: TBitBtn; Bt2KanD: TBitBtn; Bt2Peso: TBitBtn; Bt2Pfund: TBitBtn; Bt2Real: TBitBtn; Bt2USD: TBitBtn; Bt2Yen: TBitBtn; Bt2Yuan: TBitBtn; Bt2Zlo: TBitBtn; Ed1Laender: TLabeledEdit; Ed2Laender: TLabeledEdit; LiW1: TListBox; LiL1: TListBox; LiW2: TListBox; LiL2: TListBox; LiW3: TListBox; LiL3: TListBox; BtNachSeite: TButton; BtVorSeite: TButton; LaKurs: TLabel; LaAnfang: TLabel; LaEnde: TLabel; LaWEnde1: TLabel; LaWEnde2: TLabel; EdWaehrungA: TEdit; EdKurs: TEdit; EdWaehrungB: TEdit; BtTauschen: TButton; LaWAnfang: TLabel; procedure FormCreate(Sender: TObject); procedure BtVorSeiteClick(Sender: TObject); procedure BtNachSeiteClick(Sender: TObject); procedure Bt1EuroClick(Sender: TObject); procedure Bt2EuroClick(Sender: TObject); procedure Bt1USDClick(Sender: TObject); procedure Bt2USDClick(Sender: TObject); procedure Bt1PfundClick(Sender: TObject); procedure Bt2PfundClick(Sender: TObject); procedure Bt1FrClick(Sender: TObject); procedure Bt2FrClick(Sender: TObject); procedure Bt1ZloClick(Sender: TObject); procedure Bt2ZloClick(Sender: TObject); procedure Bt1KanDClick(Sender: TObject); procedure Bt2KanDClick(Sender: TObject); procedure Bt1AusDClick(Sender: TObject); procedure Bt2AusDClick(Sender: TObject); procedure Bt1YenClick(Sender: TObject); procedure Bt2YenClick(Sender: TObject); procedure Bt1YuanClick(Sender: TObject); procedure Bt2YuanClick(Sender: TObject); procedure Bt1PesoClick(Sender: TObject); procedure Bt2PesoClick(Sender: TObject); procedure Bt1RealClick(Sender: TObject); procedure Bt2RealClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var FWaehrungen: TFWaehrungen; Waehrung_A, Waehrung_B: Integer; Seite: Byte; implementation {$R *.dfm} procedure TFWaehrungen.FormCreate(Sender: TObject); begin With ImHintergrund.Canvas Do begin Brush.Color := clGreen; Rectangle(0, 0, 800, 100); Brush.Color := clHighlight; Rectangle(0, 100, 800, 400); Brush.Color := clGreen; Rectangle(0, 400, 800, 500); end; Waehrung_A := 100000; Waehrung_B := 100000; Seite := 1; LiL2.Visible := False; LiW2.Visible := False; LiL3.Visible := False; LiW3.Visible := False; BtVorSeite.Enabled := False; end; procedure TFWaehrungen.BtVorSeiteClick(Sender: TObject); begin Seite := Seite - 1; If Seite = 1 Then begin BtVorSeite.Enabled := False; BtNachSeite.Enabled := True; LiL1.Visible := True; LiW1.Visible := True; LiL2.Visible := False; LiW2.Visible := False; LiL3.Visible := False; LiW3.Visible := False; end; If Seite = 2 Then begin BtVorSeite.Enabled := True; BtNachSeite.Enabled := True; LiL1.Visible := False; LiW1.Visible := False; LiL2.Visible := True; LiW2.Visible := True; LiL3.Visible := False; LiW3.Visible := False; end; end; procedure TFWaehrungen.BtNachSeiteClick(Sender: TObject); begin Seite := Seite + 1; If Seite = 2 Then begin BtVorSeite.Enabled := True; BtNachSeite.Enabled := True; LiL1.Visible := False; LiW1.Visible := False; LiL2.Visible := True; LiW2.Visible := True; LiL3.Visible := False; LiW3.Visible := False; end; If Seite = 3 Then begin BtVorSeite.Enabled := True; BtNachSeite.Enabled := False; LiL1.Visible := False; LiW1.Visible := False; LiL2.Visible := False; LiW2.Visible := False; LiL3.Visible := True; LiW3.Visible := True; end; end; procedure TFWaehrungen.Bt1EuroClick(Sender: TObject); begin Waehrung_A := 100000; EdWaehrungB.Text := FloatToStr(StrToFloat(EdWaehrungA.Text) * (Waehrung_B Div Waehrung_A)); EdKurs.Text := FloatToStr(Waehrung_B Div Waehrung_A); LaWAnfang.Caption := 'Euro (Europa)'; LaKurs.Caption := '1 Euro (Europa) ='; LaKurs.Left := 190 - LaKurs.Width; end; procedure TFWaehrungen.Bt2EuroClick(Sender: TObject); begin Waehrung_B := 100000; EdWaehrungB.Text := FloatToStr(StrToFloat(EdWaehrungA.Text) * (Waehrung_B Div Waehrung_A)); EdKurs.Text := FloatToStr(Waehrung_B Div Waehrung_A); LaWEnde1.Caption := 'Euro (Europa)'; LaWEnde2.Caption := 'Euro (Europa)'; end; procedure TFWaehrungen.Bt1USDClick(Sender: TObject); begin Waehrung_A := 129373; EdWaehrungB.Text := FloatToStr(StrToFloat(EdWaehrungA.Text) * (Waehrung_B Div Waehrung_A)); EdKurs.Text := FloatToStr(Waehrung_B Div Waehrung_A); LaWAnfang.Caption := 'Dollar (Vereinigte Staaten)'; LaKurs.Caption := '1 Dollar (Vereinigte Staaten) ='; LaKurs.Left := 190 - LaKurs.Width; end; procedure TFWaehrungen.Bt2USDClick(Sender: TObject); begin Waehrung_B := 129373; EdWaehrungB.Text := FloatToStr(StrToFloat(EdWaehrungA.Text) * (Waehrung_B Div Waehrung_A)); EdKurs.Text := FloatToStr(Waehrung_B Div Waehrung_A); LaWEnde1.Caption := 'Dollar (Vereinigte Staaten)'; LaWEnde2.Caption := 'Dollar (Vereinigte Staaten)'; end; procedure TFWaehrungen.Bt1PfundClick(Sender: TObject); begin Waehrung_A := 80755; EdWaehrungB.Text := FloatToStr(StrToFloat(EdWaehrungA.Text) * (Waehrung_B Div Waehrung_A)); EdKurs.Text := FloatToStr(Waehrung_B Div Waehrung_A); LaWAnfang.Caption := 'Pfund (Großbritannien)'; LaKurs.Caption := 'Pfund (Großbritannien) ='; LaKurs.Left := 190 - LaKurs.Width; end; procedure TFWaehrungen.Bt2PfundClick(Sender: TObject); begin Waehrung_B := 80755; EdWaehrungB.Text := FloatToStr(StrToFloat(EdWaehrungA.Text) * (Waehrung_B Div Waehrung_A)); EdKurs.Text := FloatToStr(Waehrung_B Div Waehrung_A); LaWEnde1.Caption := 'Pfund (Großbritannien)'; LaWEnde2.Caption := 'Pfund (Großbritannien)'; end; . . . end. Wie bekomme ich jetzt Komma-Zahlen als Ergebnis, wenn ich keine Variablen als Float definieren kann und das Ergebnis (Waehrung_B Div Waehrung_A) anscheinend auch nur als Integer gewertet wird? (Waehrung_A und Waehrung_B sind das einzige Problem, sonst funktioniert alles.) Danke im Vorraus :-D P.S.: Eine Bild des Programms ist bei den Anhängen. Den rechten Teil bitte ignorieren, das wird erst später eingebaut. Mit freundlichen Grüßen, Don Muhkuh |
AW: Variable als Float definieren
Für Währungen gibt es extra ein Variablentyp, das ist der Currency.
Im Gegensatz zu anderen Realtypen hat er keine Rundungsfehler. Das ist wie ein Integer mit vier Nachkommastellen. |
AW: Variable als Float definieren
Es gibt für Fließkommazahlen aber auch
Delphi-Quellcode:
um ein paar zu nennen.
double, single, extended
Der Currency Typ ist intern ein Int64 wo die letzten vier Stellen als Nachkommastellen betrachtet werden. Ist aber soweit egal, denn das passiert intern. Bei kleinen Werten und Währungen mit großem Umrechnungsfaktor kann allerdings beim Umrechnen auch mal 0,0000 herauskommen. Nimmt man die anderen Typen (z.B. Extended) wird es auch nicht viel besser, denn hier kommen auch noch üble Rechenungenauigkeiten rein (liegt an der internen Abbildung der Werte) Man sollte es wissen, um sich darauf einstellen zu können, welchen Tod man stirbt. Buchhaltärisch reicht Currency (in 90% der Fälle) völlig aus, allerdings werden dort auch beide Werte (In Fremd- und Buchwährung) gespeichert ;) |
AW: Variable als Float definieren
Zitat:
|
AW: Variable als Float definieren
Danke für die schnelle Antwort, aber welchen Befehl (bzw. veränderte Form von FloatToStr und StrToFloat) muss ich benutzen?
|
AW: Variable als Float definieren
Zitat:
![]() ![]() |
AW: Variable als Float definieren
An für sich ist es nett, dass man einen Anfänger drauf hinweist, dass es auch Double, Real, Single, Extended Typen gibt, aber wenn er von Währungen spricht, wozu die Info? Das ist wie einem der in der Wüste kurz vor dem verdursten steht und "Wasser" ruft, zu antworten "Ich hätte das Apollinaris, Volvic, Fiji Water, Staatlich Fachingen und Perrier. Welches möchten sie den haben?".
|
AW: Variable als Float definieren
Da kommt dann der der Fehler, dass der Operator auf den Operandentypen nicht anwendbar sei. :?
|
AW: Variable als Float definieren
Glaube ich nicht.
Delphi-Quellcode:
var
Geld: Currency; Str: String; begin Geld := 123456789.1234; ShowMessage(FloatToStr(Geld)); Str := '123456789,1234'; //hier Komma Geld := StrToFloat(Str); ShowMessage(FloatToStr(Geld)); end; |
AW: Variable als Float definieren
Logisch, denn DIV geht nur bei Integer ;)
Nimm stattdessen / |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 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 by Thomas Breitkreuz