AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ungültiger Gleitkommawert?

Offene Frage von "Bummi"
Ein Thema von Eltonmaster · begonnen am 27. Dez 2012 · letzter Beitrag vom 27. Dez 2012
Antwort Antwort
mkinzler
(Moderator)

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

AW: ungültiger Gleitkommawert?

  Alt 27. Dez 2012, 13: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
 
#2

AW: ungültiger Gleitkommawert?

  Alt 27. Dez 2012, 15: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: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: ungültiger Gleitkommawert?

  Alt 27. Dez 2012, 16: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
 
#4

AW: ungültiger Gleitkommawert?

  Alt 27. Dez 2012, 18: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 18:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: ungültiger Gleitkommawert?

  Alt 27. Dez 2012, 18: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
Antwort Antwort

 

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 15:41 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