AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

ungültiger Gleitkommawert?

Offene Frage von "Bummi"
Ein Thema von Eltonmaster · begonnen am 27. Dez 2012 · letzter Beitrag vom 28. Dez 2012
Antwort Antwort
Seite 1 von 2  1 2   
Eltonmaster

Registriert seit: 27. Dez 2012
3 Beiträge
 
#1

ungültiger Gleitkommawert?

  Alt 27. Dez 2012, 14:10
Hallo Leute,
Ich hoffe das Thema ist hier richtig (Bin neu hier).


Ich beschäftige mich nun schon rund 2 Monate mit Delphi,
deshalb wollte ich mir einen Notenrechner schreiben, der mir meine Zeugnisnoten errechnet.
Ich habe also mehrere Stunden überlegt und geschrieben.
Jetzt wollte ich es testen und da wird mir angezeigt das der Wert ''' kein gültiger Gleidkommawert ist.
Ich kann mir echt nicht mehr weiterhelfen. Vielleicht könnt ihr es ja. Hoffe auf viele Antworten.

PS.: Hier ist mein ganzes Projekt. Wenn Fragen aufkommen, einfach anschreien.
http://rapidshare.com/files/3739377692/Projekt1.rar
Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    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;
    Edit9: TEdit;
    Label9: TLabel;
    Edit10: TEdit;
    Edit11: TEdit;
    Label10: TLabel;
    Label11: TLabel;
    Edit12: TEdit;
    Label12: TLabel;
    Button1: TButton;
    Button2: TButton;
    Label13: TLabel;
    Label14: TLabel;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit8: TEdit;
    Edit15: TEdit;
    Label8: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
  kk1, kk2, kk3, kk4, kk5, kk6, kk7, kk8, kk9, kks, ka1, ka2, ka3 : real;
  kkdurchschnitt : real;
  kadurchschnitt : real;
  notendurchschnitt : real;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;
  kk1, kk2, kk3, kk4, kk5, kk6, kk7, kk8, kk9, kks, ka1, ka2, ka3 : real;
  kkdurchschnitt : real;
  kadurchschnitt : real;
  notendurchschnitt : real;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
Edit5.Clear;
Edit6.Clear;
Edit7.Clear;
Edit8.Clear;
Edit9.Clear;
Edit10.Clear;
Edit11.Clear;
Edit12.Clear;
Edit13.Clear;
Edit14.Clear;
Edit15.Clear;
end;

procedure TForm3.Button2Click(Sender: TObject);
var
  kk1, kk2, kk3, kk4, kk5, kk6, kk7, kk8, kk9, kks, ka1, ka2, ka3, kas : real;
  kkdurchschnitt : real;
  kadurchschnitt : real;
  notendurchschnitt : real;
begin
if edit1.text='then edit1.Text:= '0';
if edit2.text='then edit2.Text:= '0';
if edit3.text='then edit3.Text:= '0';
if edit4.text='then edit4.Text:= '0';
if edit5.text='then edit5.Text:= '0';
if edit6.text='then edit6.Text:= '0';
if edit7.text='then edit7.Text:= '0';
if edit8.text='then edit8.Text:= '0';
if edit15.text='then edit15.Text:= '0'; //

                                            //
if edit15.text='0then edit13.Text := '8';
if edit8.text='0then edit13.Text := '7';
if edit7.text='0then edit13.text := '6';
if edit6.text='0then edit13.text := '5';
if edit5.text='0then edit13.text := '4';
if edit4.text='0then edit13.text := '3';
if edit3.text='0then edit13.text := '2';
if edit2.text='0then edit13.text := '1';
if edit1.text='0then edit13.text := '0';
 kk1 := strtofloat(edit1.text);
 kk2 := strtofloat(edit2.text);
 kk3 := strtofloat(edit3.text);
 kk4 := strtofloat(edit4.text);
 kk5 := strtofloat(edit5.text);
 kk6 := strtofloat(edit6.text);
 kk7 := strtofloat(edit7.text);
 kk8 := strtofloat(edit8.text);
 kk9 := strtofloat(edit15.text);
                                        //
if edit9.text='then edit9.Text:= '0';
if edit10.text='then edit10.Text := '0';
if edit11.text='then edit11.Text := '0';
if edit11.text='0then edit14.text := '2';
if edit10.text='0then edit14.text := '1';
if edit9.text='0then edit14.text := '0';
 ka1 := strtofloat(edit9.text);
 ka2 := strtofloat(edit10.text);
 ka3 := strtofloat(edit11.text);

 kas := ka1 + ka2 + ka3;
 kks := kk1+ kk2+ kk3+ kk4+ kk5+ kk6+ kk7+ kk8+ kk9; //
 Label13.Caption := floattostr(kks);
 Label14.Caption := floattostr(kas);
 kkdurchschnitt := kks/ strtofloat(edit13.text);
 kadurchschnitt := kas/ strtofloat(edit14.text);

 notendurchschnitt := kkdurchschnitt*(2/3)+kadurchschnitt*(1/3);
 Edit12.Text := floattostr (notendurchschnitt);
end;

end.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: ungültiger Gleitkommawert?

  Alt 27. Dez 2012, 14:17
Hallo,

tritt das Problem hier auf
Delphi-Quellcode:
 kkdurchschnitt := kks/ strtofloat(edit13.text);
 kadurchschnitt := kas/ strtofloat(edit14.text);
Edit13 wird nur unter bestimmmten Bedingungen ein Wert zugewiesen.
Ansonsten ist Edit13.Text leer und ein leerer Text ist nunmal ein ungültiger Gleitkommawert.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: ungültiger Gleitkommawert?

  Alt 27. Dez 2012, 14:18
Eines Deiner Editfelder enthält keinen gültigen "Floatwert" ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: ungültiger Gleitkommawert?

  Alt 27. Dez 2012, 14:18
Aber auch eine Vorbelegung mit 0, wie bei den anderen Feldern wäre nicht gut ( 1 wäre weniger fehlerträchtig)
Markus Kinzler
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: ungültiger Gleitkommawert?

  Alt 27. Dez 2012, 16:57
@Eltonmaster

Ohne mir jetzt deinen Code angeguckt zu haben, möchte ich dich mit einer Funktion bekannt machen. Du kennst wohl die Funktion StrToFloat. Diese Funktion ist grundsätzlich fehleranfällig, genau wie StrToInt, denn die Funktionen verlangen gültige Zahlen als String (die eine Real, die andere Integer).

Es gibt zwei Möglichkeiten einer Fehlermeldung vorzubeugen: die eine ist den String vorher auf einen gültigen Wert zu prüfen und notfalls zu reagieren. Diese Methode ist meiner Meinung nach die Bessere. Die zweite Methode ist statt StrToFloat die Funktion StrToFloatDef zu nehmen. Bei StrToFloatDef kann man für den Fall, dass der String kein gültiger Wert ist, einen Default-Wert (Ersatz-Wert) nehmen. Allerdings, auch wenn hier in dem Fall dann keine Fehlermeldung mehr kommt, weiß man nie so genau ob es jetzt mit dem richtigen Wert gerechnet wurde oder Defaultwert. Also mit Bedacht einsetzten.

x := StrToFloatDef('ca. 3,14', 3.1415926);
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

AW: ungültiger Gleitkommawert?

  Alt 27. Dez 2012, 17:23
Also ich würde das gesamte Programm komplett neu aufbauen.
Anstatt jede Note in ein Editfeld einzutragen ist es viel einfacher alle Noten
in ein mehrzeiliges Memofeld zu schreiben (jede Note in eine Zeile).

Delphi-Quellcode:
procedure TForm1.BerechneDurchschnitt;
var
  i : integer;
  zeile : string;
  summe,note : double;
  anzahl : integer;
begin
  summe := 0;
  anzahl := 0;

  // Noten aufsummieren
  for i := 0 to Memo1.Lines.Count-1 do
  begin
    zeile := Memo1.Lines[i];
    note := StrToFloatDef(zeile, -1);
    if note > 0.0 then
    begin
      summe := summe + note;
      Inc(anzahl);
    end;
  end;

  // Durchschnitt berechnen und anzeigen
  if anzahl > 0 then
    EditDurchschnitt.Text := FloatToStr(summe / anzahl)
  else
    EditDurchschnitt.Text := 'keine Noten vorh.';
end;
  Mit Zitat antworten Zitat
Eltonmaster

Registriert seit: 27. Dez 2012
3 Beiträge
 
#7

AW: ungültiger Gleitkommawert?

  Alt 27. Dez 2012, 19:50
Vielen Dank für die Antworten.

Zu Popov. Es dürften ja nur zugelassenen Werte (Zahlen) eingetragen werden, oder nicht? 0-6

Und sonst versuche ich es mal mit dem memofeld (könnt ihr mir mal erklähren wie die Rechnung dann aufgebaut ist, weil nur abkopieren ist ja sinnfrei )
Außerdem, muss ich denn keinen Button betätiegen wenn ich diese Variante (memo) verwende?

Geändert von Eltonmaster (27. Dez 2012 um 19:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

AW: ungültiger Gleitkommawert?

  Alt 27. Dez 2012, 19:53
Ganz anderer Vorschlag: statt der Edits ComboBoxen nehmen, Items zur Designtime eintragen, Style auf z.B. csOwnerDrawFixed und ItemIndex mit 0 vorbelegen. So kann es gar keine Fehleingaben geben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: ungültiger Gleitkommawert?

  Alt 28. Dez 2012, 00:17
Delphi-Quellcode:
  private
  kk1, kk2, kk3, kk4, kk5, kk6, kk7, kk8, kk9, kks, ka1, ka2, ka3 : real;
  kkdurchschnitt : real;
  kadurchschnitt : real;
  notendurchschnitt : real;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;
  kk1, kk2, kk3, kk4, kk5, kk6, kk7, kk8, kk9, kks, ka1, ka2, ka3 : real;
  kkdurchschnitt : real;
  kadurchschnitt : real;
  notendurchschnitt : real;

implementation

procedure TForm3.Button2Click(Sender: TObject);
var
  kk1, kk2, kk3, kk4, kk5, kk6, kk7, kk8, kk9, kks, ka1, ka2, ka3, kas : real;
  kkdurchschnitt : real;
  kadurchschnitt : real;
  notendurchschnitt : real;
Ich sehe eigentlich keinen Grund warum Du die Variablen dreimal definiert hast.
Ebenso solltest Du statt real double oder single benutzen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Eltonmaster

Registriert seit: 27. Dez 2012
3 Beiträge
 
#10

AW: ungültiger Gleitkommawert?

  Alt 28. Dez 2012, 00:42
Das wahr ein Fehler von mir

Und ich will nochmal darauf hinweisen: Ich bin ein neuling d.h. Auch die
Methode mit der Box klingt gut, ich weiß aber nicht wie ich sie umsetzen soll.

Ps.: wenn ich double nehme wie heißt das dann (strto...)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz