AGB  ·  Datenschutz  ·  Impressum  







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

Fehlermeldung "Gleitkommaüberlauf"

Ein Thema von Emilio · begonnen am 23. Mär 2006 · letzter Beitrag vom 24. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
Emilio

Registriert seit: 14. Dez 2003
65 Beiträge
 
#1

Fehlermeldung "Gleitkommaüberlauf"

  Alt 23. Mär 2006, 09:20
Moin allerseits,

ich erhalte die Fehlermeldung "Gleitkommaüberlauf" in der markierten Prozedur und habe keine Idee, woher sie kommt, warum und v.a. wie ich sie wegbekomme:

Delphi-Quellcode:
 
//. . . wenn noch kein neuer LVP eingetragen wurde
  if EditCurr2.Value = 0 then
    begin
  CalcRule01(ekneu, zuschlag, BPAlt, LVPAlt, MwSt, BruttoLVPAlt, MargeEAlt, ProvSatz,
  ProvLVPAlt, bpneu, bpaender, lvpneu, lvpaender, bruttolvpneu, bruttolvpaender, margeEneu,
  margeEaender, margeprozneu, margeprozaender, provlvpneu, provlvpaender);
    end
    else
// . . . wenn ein LVP bereits vorhanden ist
   if EditCurr2.Value > 0 then
    case Form2.ShowModal of
    mryes: // Werte mit Standard-KalkluationsRegel überschreiben
      CalcRule01(ekneu,zuschlag,BPAlt,LVPAlt,MwSt,BruttoLVPAlt,MargeEAlt,ProvSatz,
      ProvLVPAlt,bpneu,bpaender,lvpneu,lvpaender,bruttolvpneu,bruttolvpaender,margeEneu,
      margeEaender,margeprozneu,margeprozaender,provlvpneu,provlvpaender);
    mrno: // nicht überschreiben
      CalcRule03(ekneu,zuschlag,lvpneu,ProvSatz,MargeEAlt,ProvLVPAlt,bpneu,margeEneu, // hier kömmt der Fehler und zwar
      margeprozneu,provlvpneu,margeEaender,margeprozaender,provlvpaender); // genau bei der Position 'margeprozneu'
    mrcancel:
      exit;
    end;

  EditCurr7.Value := bpneu;
  EditCurr2.Value := lvpneu;
  EditCurr3.Value := bruttolvpneu;
  EditCurr4.Value := margeEneu;
  EditCurr5.Value := margeprozneu;
  EditCurr6.Value := provlvpneu;
zur Erläuterung:
auf meiner Form sind mehrere Edits vom Typ TEditCurr (Extended), in welche der User Werte eingeben kann und Berechnungen mit diesen Werten durchführen kann. Hier speziell: der User gibt einen neuen Verkaufspreis für einen Artikel ein; anschließend einen neuen Einkaufspreis in das dafür vorgesehene Feld. Nach Auswahl des Gemeinkostenzuschlagssatzes "stellt das Programm fest", dass die Standard-Kalkulationsregel nicht ohne Rückfrage angewendet werden kann (siehe Punkt: // wenn ein LVP bereits vorhanden ist). Also öffnet sich ein Form modal und bietet ja, nein und abbrechen. Bei Wahl auf ja, wird die Standardregel angewendet (eingegebene Werte überschrieben), bei nein, soll mit den User-Werten gerechnet werden - und hier klömmts!

Hat jemand nen Tipp in welcher Ecke des Dunkels sich ein Streichholz verbirgt?

VG
Emilio
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Fehlermeldung "Gleitkommaüberlauf"

  Alt 23. Mär 2006, 10:38
Den Code, der den Gleitkommaüberlauf erzeugt, hast du nicht gezeigt.
Aber ich gebe dir ein Tip zu deinen Variablen:
Du solltest zusammenhängende Werte in einem Record speichern und übergeben.
Delphi-Quellcode:
type
   TProvisionen = record
      Satz : double;
      LVPAlt : double;
      ...
   end;
Die erleichtert die Strukurierung deiner Aufgabe und man wird nicht von 20 Parametern erschlagen.
Andreas
  Mit Zitat antworten Zitat
Emilio

Registriert seit: 14. Dez 2003
65 Beiträge
 
#3

Re: Fehlermeldung "Gleitkommaüberlauf"

  Alt 24. Mär 2006, 07:48
Moin Moin,

Zitat:
Den Code, der den Gleitkommaüberlauf erzeugt, hast du nicht gezeigt.
üps - zu fix den "senden" Button gedrückt ...

hier der Rest:

Delphi-Quellcode:
// *** Berechnung der Parameter, wenn ein ekneu und ein lvpneu eingegeben wurde ***
procedure CalcRule03(ekneu, zuschlag,lvpneu,ProvSatz, MargeEAlt, ProvLVPAlt : Extended;
var bpneu, margeEneu, margeprozneu, provlvpneu, margeEaender, margeprozaender, provlvpaender: Extended);

begin
  bpneu := f_bpneu(ekneu, zuschlag);
  margeEneu := f_margeEneu(ekneu, lvpneu);
  margeprozneu := f_margeprozneu(ekneu, lvpneu);
  provlvpneu := f_provlvpneu(bpneu, lvpneu, ProvSatz);
  margeEaender := f_margeEaender(margeEneu, MargeEAlt);
  margeprozaender := f_margeProzaender(margeEneu, MargeEAlt);
  provlvpaender := f_provlvpaender(provlvpneu, ProvLVPAlt);
end;
und hier die Funktion auf die der Compiler verweist:

Delphi-Quellcode:
function f_margeprozneu(ekneu: Extended; lvpneu: Extended): Extended;
  begin
    Result := (1-(ekneu/lvpneu))*100;
  end;

Warum er nur bei "nein" an dieser Stelle hängenbleibt ?

VG Emilio
  Mit Zitat antworten Zitat
marabu

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

Re: Fehlermeldung "Gleitkommaüberlauf"

  Alt 24. Mär 2006, 07:54
Hallo Emilio,

hast du das Programm denn mal in der Funktion f_margeprozneu() angehalten um die Variablen zu inspizieren?

Grüße vom marabu
  Mit Zitat antworten Zitat
Khananka

Registriert seit: 18. Feb 2006
Ort: Mainz
6 Beiträge
 
Delphi 2005 Enterprise
 
#5

Re: Fehlermeldung "Gleitkommaüberlauf"

  Alt 24. Mär 2006, 08:14
Moin,
kann mich dem Tip von marabu nur anchliessen, mein erster Gedanke bei sowas ist immer eine Division durch Null - hiesse in Deinem Fall, dass lvpneu auf "0" überprüft werden müsste.

Hth,
Khananka
  Mit Zitat antworten Zitat
Emilio

Registriert seit: 14. Dez 2003
65 Beiträge
 
#6

Re: Fehlermeldung "Gleitkommaüberlauf"

  Alt 24. Mär 2006, 08:20
Hi Marabu,

nein, da ich auf diese Idee nicht gekommen bin

und (bitte nicht schlagen!) ich nicht weiß wie ich, wie ich die Variable inspizieren könnte. Angehalten an diesem Punkt habe ich, aber dann?

@Khananka,
Danke für Deinen Hinweis. Dieser Gedanke ist mir auch gekommen. Aber wie könnte ich der Prozedur den Wert für LVP (also lvpneu := eDitCurrX.Value) mitteilen?

VG
Emilio
  Mit Zitat antworten Zitat
Klaus01

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

Re: Fehlermeldung "Gleitkommaüberlauf"

  Alt 24. Mär 2006, 08:32
variable markieren Ctrl-F5 drücken

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Emilio

Registriert seit: 14. Dez 2003
65 Beiträge
 
#8

Re: Fehlermeldung "Gleitkommaüberlauf"

  Alt 24. Mär 2006, 08:52
Danke!

Es kömmt die Meldung: [margeprozneu] undefinierter Bezeichner.
Kommt aber auch bei allen anderen Variablen in der CalcRule03
  Mit Zitat antworten Zitat
Klaus01

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

Re: Fehlermeldung "Gleitkommaüberlauf"

  Alt 24. Mär 2006, 08:56
du kannst nicht die Prozedure überwachen,
die Variablen kannst Du überwachen

Result := (1-(ekneu/lvpneu))*100;

Delphi-Quellcode:
function f_margeprozneu(ekneu: Extended; lvpneu: Extended): Extended;
  begin <- den Breakpoint setzen
    Result := (1-(ekneu/lvpneu))*100;
  end
;

dann mit F7 oder F8 weitergehen

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Emilio

Registriert seit: 14. Dez 2003
65 Beiträge
 
#10

Re: Fehlermeldung "Gleitkommaüberlauf"

  Alt 24. Mär 2006, 09:06
ah jetzt ja!

strange - der lvpneu hat einen Wert von 0,20981 ... e-4933

mit so einem Wert könnt ich auch nicht rechnen. Aber woher kommt denn der?
  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 22:34 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