Autor Beitrag
FloXxX
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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:
ausblenden volle Höhe 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:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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 user profile iconNarses: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 05.12.2010 um 13:08
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 04.12.10 23:12 
meinst Du sowas?
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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? :roll:

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?
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 05.12.10 13:15 
Irgendwie funktionieren beide Methoden nicht ohne Fehlermeldungen :(
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 05.12.10 13:16 
Was kommt wo für eine Meldung?
FloXxX Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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... :roll:
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: So 05.12.10 15:31 
Hi, Fehlen nicht auch die Klammern?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 05.12.10 15:45 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Hi, Fehlen nicht auch die Klammern?
Wozu sollen die gut sein? :gruebel:
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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 05.12.10 16:43 
Aber nachdem du das ersetzt hast, klappt es ja, oder?
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: So 05.12.10 18:33 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Wozu sollen die gut sein? :gruebel:

Hast recht. :oops:
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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 06.12.10 21:40 
noch nicht probiert, sorry

---Moderiert von user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 06.12.10 23:01 
user profile iconFloXxX hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 06.12.10 23:02 
Es kommt aber dauernd irgendwas von es gibt keine überladene version von trystrtofloat blaa blaa
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 06.12.10 23:28 
user profile iconFloXxX hat folgendes geschrieben Zum zitierten Posting springen:
Es kommt aber dauernd irgendwas von es gibt keine überladene version von trystrtofloat blaa blaa
Dann hast du vermutlich den Typ der Variablen immer noch bei Real gelassen... :roll: