AGB  ·  Datenschutz  ·  Impressum  







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

Addieren in if Abfrage

Ein Thema von Niklas- · begonnen am 6. Feb 2008 · letzter Beitrag vom 7. Feb 2008
Antwort Antwort
Seite 1 von 2  1 2      
Niklas-

Registriert seit: 24. Dez 2007
11 Beiträge
 
#1

Addieren in if Abfrage

  Alt 6. Feb 2008, 18:38
Hallo
Ich habe da ein ganz banales Problem:
if (3.12+1.5+3.25+0.4 = 8.27) then Label5.caption := 'true'; funktioniert wie es soll, nur
Delphi-Quellcode:
a := 3.12;
b := 1.5;
c := 3.25;
d := 0.4;
if (a+b+c+d = 8.27) then Label5.caption := 'true';
Funktioniert nicht, ich versteh es einfach nicht, aber bei einer multiplikation sieht es genauso aus!

Die Zahlen sind alle extenden Variablen...

Ganz banal, kann mir da einer helfen???
Ich benutze Delphi 7 Personal

Danke!!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Addieren in if Abfrage

  Alt 6. Feb 2008, 18:48
Hallo Niklas,

du musst richtig klammern:

if (a+b+c+d) = 8.27 then Label5.caption := 'true'; Grüße vom marabu
  Mit Zitat antworten Zitat
Niklas-

Registriert seit: 24. Dez 2007
11 Beiträge
 
#3

Re: Addieren in if Abfrage

  Alt 6. Feb 2008, 19:11
Nein, sorry, geht trotzdem nicht...

EDIT: So gehts:
if ((a+b)+(c+d)) = 8.27 then Label5.caption := 'true'; Nur warum???
  Mit Zitat antworten Zitat
MrMyagi

Registriert seit: 2. Mai 2007
203 Beiträge
 
Delphi 7 Personal
 
#4

Re: Addieren in if Abfrage

  Alt 6. Feb 2008, 19:28
Abend,
Edit: ---sry, was überlesen ---


mfG, Nico
  Mit Zitat antworten Zitat
Niklas-

Registriert seit: 24. Dez 2007
11 Beiträge
 
#5

Re: Addieren in if Abfrage

  Alt 6. Feb 2008, 19:33
Delphi-Quellcode:
a := 3.12;
b := 1.5;
c := 3.25;
d := 0.4;
if ((a*b*c*d)) = 6.084 then Label5.caption := 'trueelse Label5.caption := floattostr(a*b*c*d);
bei diese abfrage gibt mir das *zensiert* Label "6,084" aus!! Ich versteh das nicht! Weil wenn a*b*c*d 6,084 sind, muss das Laberl doch "true" anzeigen!!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Addieren in if Abfrage

  Alt 6. Feb 2008, 19:38
Das mit der Klammerung war eine Fehlleistung von mir. Hier werden Gleitkommazahlen addiert und mit einer Näherung verglichen, was nur in seltenen Ausnahmefällen funktioniert. Hier wird ein Epsilon-Test benötigt:

if {Math.}IsZero(a+b+c+d - 8.27) then Label5.caption := 'true'; Freundliche Grüße
  Mit Zitat antworten Zitat
Niklas-

Registriert seit: 24. Dez 2007
11 Beiträge
 
#7

Re: Addieren in if Abfrage

  Alt 6. Feb 2008, 19:41
Magst du nochmal bitte genau erklären, warum das so ist??

Nur aus interesse...

Danke schonmal!!

EDIT: Das ganze funktioniert leider nicht... Das {Math.} wird ignoriert und dann sagt er mir, das er nicht weiß, was IsZero ist...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Addieren in if Abfrage

  Alt 6. Feb 2008, 19:46
Das Problem ist, dass deine Gleitkommazahlen sich nur in seltenen Fällen exakt binär darstellen lassen. In der Regel erhältst du eine binäre Näherung. Ein Test auf Gleichheit schlägt dann zwangsläufig fehl. Näheres dazu findest du unter dem von mir verwendeten terminus technicus "Epsilon Test" - auch hier im Forum.
  Mit Zitat antworten Zitat
Niklas-

Registriert seit: 24. Dez 2007
11 Beiträge
 
#9

Re: Addieren in if Abfrage

  Alt 6. Feb 2008, 19:54
Danke, das habe ich mir fast gedacht, das ist auch der Grund warum ich extended genommen habe, denn bei real wird der ganze Rattenschwanz dann auch noch angezeigt...

Aber das ganze funktioniert leider nicht... Das {Math.} wird ignoriert und dann sagt er mir, das er nicht weiß, was IsZero ist...

Und nun??

EDIT: So funktioniert das ganze:
if ((6.084 - summe < 0.001) and (6.084 - summe > -0.001)) then Label5.caption := 'true'; Ist aber nicht ganz so elegant...
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#10

Re: Addieren in if Abfrage

  Alt 6. Feb 2008, 20:00
Deswegen ja auch Math.IsZero...

Er will mit den geschweiften Klammern sagen, dass IsZero in der UNit Math steckt. Also musst Du die Unit Math in Deine Uses-Klauses aufnehmen, dann findet er die Funktion auch.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:54 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