| Autor |
Beitrag |
FloXxX
Hält's aus hier
Beiträge: 6
|
Verfasst: Sa 04.12.10 22:55
Ich habe ein Problem, ich habe ein Programm geschrieben, welches automatisch den Ertrag bei verschiedenen Sachen ausrechnet.
Standardzahl ist 0, wenn ich jetzt eine Zahl eintrage und diese aber wieder rauslösche, was muss ich machen, dass da automatisch 0 steht und nicht nichts? Sonst kommt ein Fehler mit dem ungültigen Gleitkommawert
Qeulltext:
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: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77:
| unit URechner;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) Telemarktlogo: TImage; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Edit7: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Beenden: TButton; Button1: TButton; PnlErgebnis: TPanel; Panel2: TPanel; Label8: TLabel; Label9: TLabel; procedure BeendenClick(Sender: TObject); procedure Button1Click(Sender: TObject);
private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BeendenClick(Sender: TObject); begin close end;
procedure TForm1.Button1Click(Sender: TObject); var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r: real; begin a:= 0.65; b:= 0.20; c:= 0.15; d:= StrToFloat(Edit1.Text); e:= StrToFloat(Edit2.Text); f:= StrToFloat(Edit3.Text); g:= StrToFloat(Edit4.Text); h:= StrToFloat(Edit5.Text); i:= StrToFloat(Edit6.Text); j:= StrToFloat(Edit7.Text); k:= d*(a+b+c); l:= e*(a+b); m:= f*(a+c); n:= g*a; o:= h*(b+c); p:= i*b; q:= j*c; r:= k+l+m+n+o+p+q; PnlErgebnis.caption:=FloatToStr(r); end;
end. |
Moderiert von Narses: Code- durch Delphi-Tags ersetztModeriert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 05.12.2010 um 13:08
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Sa 04.12.10 23:12
meinst Du sowas?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.AllEditsChange(Sender: TObject); var d:Double; begin if not TryStrToFloat(TEdit(Sender).Text,d) then begin TEdit(Sender).Text := '0'; TEdit(Sender).Selectall; end; end; |
Korrigiert, nach Hinweis von Jaenicke
ergänzt: TEdit(Sender).Selectall;
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Zuletzt bearbeitet von bummi am So 05.12.10 01:20, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 05.12.10 00:08
Deine Variablen- und Komponentennamen machen das sicher sehr übersichtlich. Was meinst du wie lange du da noch weißt wofür welche Variable steht?
Gute Variablennamen sind eine der wichtigsten Voraussetzungen für übersichtlichen Quelltext.
Was das Setzen auf '0' angeht:
Wenn, dann müsste die Null dann auch markiert werden (SelectAll). Denn wenn man sonst anfängt zu tippen, hat man eine Null zu viel.
Besser ist aber gleich den Fehler abzufangen. Denn was, wenn jemand etwas eingibt, was keine Zahl ist, z.B. aus Versehen den Buchstaben o?
Delphi-Quelltext 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79:
| { ... } procedure TForm1.Button1Click(Sender: TObject); var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r: real; begin a := 0.65; b := 0.20; c := 0.15; if TryStrToFloat(Edit1.Text, d) and TryStrToFloat(Edit2.Text, e) and TryStrToFloat(Edit3.Text, f) and TryStrToFloat(Edit4.Text, g) and TryStrToFloat(Edit5.Text, h) and TryStrToFloat(Edit6.Text, i) and TryStrToFloat(Edit7.Text, j) then begin k := d*(a+b+c); l := e*(a+b); m := f*(a+c); n := g*a; o := h*(b+c); p := i*b; q := j*c; r := k+l+m+n+o+p+q; PnlErgebnis.Caption := FloatToStr(r); end else PnlErgebnis.Caption := '<error>'; end;
end. |
|
|
FloXxX 
Hält's aus hier
Beiträge: 6
|
Verfasst: So 05.12.10 13:15
Irgendwie funktionieren beide Methoden nicht ohne Fehlermeldungen 
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 05.12.10 13:16
Was kommt wo für eine Meldung?
|
|
FloXxX 
Hält's aus hier
Beiträge: 6
|
Verfasst: So 05.12.10 15:25
[Fehler] UTelemarkt.pas(59): Es gibt keine überladene Version von 'TryStrToFloat', die man mit diesen Argumenten aufrufen kann
[Fehler] UTelemarkt.pas(59): Es gibt keine überladene Version von 'TryStrToFloat', die man mit diesen Argumenten aufrufen kann
[Fehler] UTelemarkt.pas(60): Es gibt keine überladene Version von 'TryStrToFloat', die man mit diesen Argumenten aufrufen kann
[Fehler] UTelemarkt.pas(60): Es gibt keine überladene Version von 'TryStrToFloat', die man mit diesen Argumenten aufrufen kann
[Fehler] UTelemarkt.pas(61): Es gibt keine überladene Version von 'TryStrToFloat', die man mit diesen Argumenten aufrufen kann
[Fehler] UTelemarkt.pas(61): Es gibt keine überladene Version von 'TryStrToFloat', die man mit diesen Argumenten aufrufen kann
[Fehler] UTelemarkt.pas(62): Es gibt keine überladene Version von 'TryStrToFloat', die man mit diesen Argumenten aufrufen kann
[Fataler Fehler] PTelemarkt.dpr(5): Verwendete Unit 'UTelemarkt.pas' kann nicht compiliert werden
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 05.12.10 15:27
Das liegt daran, dass du den generischen Typ Real benutzt. Warum?
Wenn du einen der normalen Typen benutzt und damit selbst schaust, welche Genauigkeit du brauchst (statt zu sagen: nimm mal irgendeinen Typ), klappt das auch. Nimm einfach Double, Single, ... ganz was du willst.
Und wenn du geschaut hättest, was denn die Parameter richtig wären, hättest du das auch selbst gemerkt... 
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: So 05.12.10 15:31
Hi, Fehlen nicht auch die Klammern?
Delphi-Quelltext 1:
| if (TryStrToFloat(Edit1.Text, d)) and (TryStrToFloat(Edit2.Text, e))..... then |
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 05.12.10 15:45
ALF hat folgendes geschrieben : | | Hi, Fehlen nicht auch die Klammern? |
Wozu sollen die gut sein?
Die Parameter gehören auch so zur Funktion, auch ohne die zusätzlichen Klammern.
Im Gegenteil, teilweise kommt der Delphicompiler (zumindest in älteren Versionen) mit genau solchen überflüssigen Klammern durcheinander.
|
|
FloXxX 
Hält's aus hier
Beiträge: 6
|
Verfasst: So 05.12.10 16:43
Ich habe halt bis jetzt keine Ahnung von Delphi, ich habe letzte Informatik Stunde das erste mal Delphi gehabt, alles was wir gemach thaben war mit integer und IntToStr (also wir hatten nicht mal das float) 2 zahlen addiert
ich bin ein völliger anfänger
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 05.12.10 16:43
Aber nachdem du das ersetzt hast, klappt es ja, oder?
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: So 05.12.10 18:33
jaenicke hat folgendes geschrieben : | Wozu sollen die gut sein?  |
Hast recht.
Wahrscheinlich nur wenn man mit '>,<,=' vergleichen will und dann noch 'and, or, xor' verwendet.
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
FloXxX 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mo 06.12.10 21:40
noch nicht probiert, sorry
--- Moderiert von Narses: Beiträge zusammengefasst---
ist es möglich dass es irgendwie dann so aussieht
if d:=numeric = false then d:=0
und dann wenn es keine nummer ist es automatisch als 0 gesehen wird
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Mo 06.12.10 22:55
Es wurde doch bereits "TryStrToFloat" genannt?!?
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.12.10 23:01
FloXxX hat folgendes geschrieben : | | und dann wenn es keine nummer ist es automatisch als 0 gesehen wird |
Was hast du denn dagegen, den Fehler komplett abzufangen statt falsch (mit 0) zu rechnen?
Aber wenn du das unbedingt möchtest: siehe StrToIntDef...
|
|
FloXxX 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mo 06.12.10 23:02
Es kommt aber dauernd irgendwas von es gibt keine überladene version von trystrtofloat blaa blaa
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Mo 06.12.10 23:12
Kannst du das bissl mit Quelltext untermauern?
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.12.10 23:28
|
|
|