![]() |
2 Nachkommastellen
Hallo Delphianer,
ich habe hier ein kleines problem und zwar habe benötige ich in meinen Edits 2 Nachkommastellen. Hier habe ich mal einen Quellcode wie es bei mir aussieht bis jetzt.
Delphi-Quellcode:
Müsste eigentlich die richtige Funktion sein...
for i := 1 to 12 do
begin ergebnis := ergebnis + FloatToStrF(TEdit(FindComponent('Edit' + IntToStr(i))).Text, ffFixed, 8, 2); end; Kann jemand helfen? MFG [edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit] |
Re: 2 nach Kommastellen
Ich würde erst das Ergebnis formatieren
|
Re: 2 nach Kommastellen
was ist daran deiner Meinung nach falsch?
Was kommt bei raus/ was bekommst du für eine Fehlermeldung? |
Re: 2 nach Kommastellen
Zitat:
|
Re: 2 Nachkommastellen
Wenn ich es mit StrToFloat mache sind es zu viele parameter...
Delphi-Quellcode:
Sry mein Fehler ich poste mal den ganzen Quellcode von der procedure.
for i := 1 to 12 do
begin ergebnis := ergebnis + StrToFloat(TEdit(FindComponent('Edit' + IntToStr(i))).Text, ffFixed, 8, 2); end;
Delphi-Quellcode:
procedure TfrmKostenaufstellung.Edit1Change(Sender: TObject);
var ergebnis: Real; i: integer; begin ergebnis := 0; for i := 1 to 12 do begin ergebnis := ergebnis + StrToFloat(TEdit(FindComponent('Edit' + IntToStr(i))).Text, ffFixed, 8, 2); end; Edit1201.Text := FloatToStrF(ergebnis, ffFixed, 8, 2); begin ergebnis :=0; for i := 1201 to 1206 do begin ergebnis := ergebnis + StrToFloatDef(TEdit(FindComponent('Edit' + IntToStr(i))).Text,0); end; prodLK.Text := FloatToStrF(ergebnis, ffFixed, 8,2); end; end; |
Re: 2 Nachkommastellen
Delphi-Quellcode:
BTW:
ergebnis := ergebnis + StrToFloat(TEdit(FindComponent('Edit' + IntToStr(i))).Text);
Zitat:
|
Re: 2 Nachkommastellen
Zitat:
![]() Zitat:
sondern daß er sich sozusagen Zifferngruppen erstellt hat. z.B. 1. Zeile Edit101 bis Edit106 und eben 12. Zeile Edit1201 bis Edit1206 :zwinker: Mit über 1200 Edits und noch anderen Kompunenten wäre die Form ja etwas "überfüllt" :roll: |
Re: 2 Nachkommastellen
jap da steig ich noch durch... :)
ich habs genauso gemacht wie himitsu es geschrieben hat... bei diesem beispiel habe ich die zifferngruppe 1-12 (edits). und den edits will ich 2 nach kommastellen hinzufügen. |
Re: 2 Nachkommastellen
wenn ich es mit
Delphi-Quellcode:
mache, kommt eine debuger-exception das im projekt eine exception der klasse EConvertError mit der Meldung ' " ist kein gültiger Gleitkommawert' aufgetreten.
ergebnis := ergebnis + StrToFloat(TEdit(FindComponent('Edit' + IntToStr(i))).Text);
|
Re: 2 Nachkommastellen
Dann nimm halt TryStrToFloat oder StrToFloatDef.
|
Re: 2 Nachkommastellen
Verwende besser StrToFloatDef()
|
Re: 2 Nachkommastellen
Bei Ergänzungen editiere bitte zukünftig deinen letzen Beitrag,
wenn in der Zwischenzeit noch keiner geantwortet hat. (darum darf man dseine Beiträge auch einen Tag lang editieren, ohne "puschen" zu müssen) Zur Fehlermeldung: Es muß eine gültige Zahl im Edit stehen und "Nichts" (ein Leerstring) ist keine Zahl. |
Re: 2 Nachkommastellen
jetzt habe ich es mit StrToFloatDef gemacht aber es werden mir keine Kommastellen angezeigt.
Delphi-Quellcode:
for i := 1 to 12 do
begin ergebnis := ergebnis + StrToFloatDef(TEdit(FindComponent('Edit' + IntToStr(i))).Text,0); end; |
Re: 2 Nachkommastellen
Was auch gut geht, ist die Format-Funktion aus den SysUtils:
Delphi-Quellcode:
var
f: Double; begin f := 3/7; Edit1.Text := Format('%.2f',[f]); |
Re: 2 Nachkommastellen
Zitat:
|
Re: 2 Nachkommastellen
Zitat:
man muss es doch in dem vorhanden quellcode anpassen können :wall: |
Re: 2 Nachkommastellen
Du musst die Ausgabe anpassen.
Delphi-Quellcode:
Edit1201.Text := Format('%.2f',[ergebnis]);
|
Re: 2 Nachkommastellen
Delphi-Quellcode:
Grüße
for i := 1 to 12 do
begin ergebnis := ergebnis + StrToFloat(TEdit(FindComponent('Edit' + IntToStr(i))).Text); // um hier Rundungsfehler zu vermeiden end; Edit1201.Text := // wie Detlef beschrieben hat begin ergebnis :=0; Klaus |
Re: 2 Nachkommastellen
Zitat:
ich will die edits bei mir sind es wie hier:
Delphi-Quellcode:
12 edits. jedes edit soll zwei nachkommastellen besitzen.
for i := 1 to 12 do
begin ergebnis := ergebnis + StrToFloatDef(TEdit(FindComponent('Edit' + IntToStr(i))).Text,0); end; Hier mal die ganze procedure vielleicht wirds dann klarer:
Delphi-Quellcode:
var
ergebnis: Real; i: integer; begin ergebnis := 0; for i := 1 to 12 do begin ergebnis := ergebnis + StrToFloatDef(TEdit(FindComponent('Edit' + IntToStr(i))).Text,0); end; Edit1201.Text := FloatToStrF(ergebnis, ffFixed, 8, 2); begin ergebnis :=0; for i := 1201 to 1206 do begin ergebnis := ergebnis + StrToFloatDef(TEdit(FindComponent('Edit' + IntToStr(i))).Text,0); end; prodLK.Text := FloatToStrF(ergebnis, ffFixed, 8,2); end; end; |
Re: 2 Nachkommastellen
Dann musst Du eben jedes Edit anpassen. Du zeigst uns die ganze Zeit das Auslesen der Werte, was aber keinen Bezug zur Formatierung der Edits hat.
|
Re: 2 Nachkommastellen
.. kannst Du anstelle der TEdit TMaskEdit nehmen ?
Grüße Klaus |
Re: 2 Nachkommastellen
Zitat:
|
Re: 2 Nachkommastellen
negative. Leider nicht... Wie pass ich dann die ganzen Edits an?
Indem ich jedes edit so anpasse?:
Delphi-Quellcode:
Edit1.text := FloatToStrF (Edit1.text,ffFixed,8,2)
|
Re: 2 Nachkommastellen
Ouou, bitte stelle das nächste Mal deine Frage präziser! Es hat 15 Beiträge gebraucht, bis die eigentliche Frage klar war. Deine Codeschnipsel hatten nichts mit deinem Problem zu tun und waren eher irreführend. Einfach mal vor dem Fragestellen überlegen, was dein Ziel ist, und wie man das den anderen am besten verklickern kann :zwinker:
So, nun zu deinem Problem: es gibt verschiedene Ansätze, wie man das lösen kann: 1) Du verwendest, wie weiter oben erwähnt, entsprechende Komponenten, die eine Falscheingabe verhindern. 2) Du überprüfst selbst, ob eine Falscheingabe eingegeben wurde. Das kannst du während der Eingabe machen (und dort dann zB die Eingabe verhindern) oder bei einer Aktion (zB wenn der Benutzer den Addieren-Button klickt). Ich hab mir mal was kurzes überlegt:
Delphi-Quellcode:
Ist zwar noch nicht ganz komfortabel (Nachkommastellen machen Probleme), aber immerhin ein Ansatz :mrgreen:
procedure TfrmMain.EditChange(Sender: TObject);
var Temp: Double; begin with (Sender as TEdit) do if TryStrToFloat(Text, Temp) then begin Text := Format('%f', [Temp]); Font.Color := clBlack; end else Font.Color := clRed; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 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-2025 by Thomas Breitkreuz