Berechnungsformeln mit variablen Operatoren verwenden

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Berechnungsformeln mit variablen Operatoren verwenden

Beitrag von isp (ForumUser / 39 / 16 / 0 ) »
Hallo zusammen,
vllt. hat jemand schon ähnliches gesehen oder gemacht.

Ich habe drei Operatoren (Variablen), die in unterschiedlichen Formeln verwendet werden sollen.

Operator1 + Operator2 * Operator3,
Operator1 / Operator2 + Operator3
usw.

Frage:
wie diese Formel am besten abgelegt werden können?
in einem String und dann parsen, oder in einer Tabellenform?
oder vllt. gibt es eine Klasse oder FuBa dafür?

Vielen Dank!

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Berechnungsformeln mit variablen Operatoren verwenden

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
Nachdem ich diese Anfrage auch per PM bekommen hab, hier meine Antwort, da sie evtl. auch für andere interessant sein könnte;

Ich würde das ungefähr so ablegen:
Operator (+, -, * oder /)
Klammer auf (X oder leer)
Wert (Floating-Point)
Klammer zu (X oder leer)

Also in einer Tabelle dann:
+ 0.5
* X 1
+ 2 X

Würde folgende Formel ergeben:
+ 0.5 * ( 1 + 2 )

Die Verarbeitung könnte dann in einem rekursiven Aufruf erfolgen. Wenn "Klammer auf" erreicht wird, muss über den Inhalt in der Klammer eine Teilberechnung erfolgen. Wenn "Klammer zu" erreicht wird den rekursive Aufruf beenden.

function berechnen ( formel :tabelle, index :integer ):float {
ergebnis = 0;

for (i = index;i < formel.length;i++) {
value = formel.value;
if (formel.open = 'X') value = berechnen(formel, i);
if (formel.close = 'X') return ergebnis;
switch formel.operator {
case '+': ergebnis = ergebnis + value;
case '-': ergebnis = ergebnis - value;
case '*': ergebnis = ergebnis * value;
case '/': ergebnis = ergebnis / value;
}
}
return ergebnis;
}

Ist jetzt nicht ganz korrekt, der Index müsste als CHANGING Parameter definiert sein, aber in der C-Systax gibt es sowas leider nicht. ABAP-Syntax wäre zu lange geworden ;)
Und irgendwas musst du schon selber machen ;)

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Berechnungsformeln mit variablen Operatoren verwenden

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hi ADT,

ich hatte, vor Jahren auch mal dieses Problem. Die Formeln sehen z.B. so aus:

Code: Alles auswählen.

(((PI*(HEIG+CORH)/3)*((-((HEIG+CORH)*TAN(FREA*PI/180)-(INCI+CORB)/2))*(-((HEIG+CORH)*TAN
(FREA*PI/180)-(INCI+CORB)/2))+(-((HEIG+CORH)*TAN(FREA*PI/180)-(INCI+CORB)/2))*
(INCI+CORB)/2+(INCI+CORB)/2*(INCI+CORB)/2))-(PI*((BODI/SHRI)*((INCI+CORB)/(INCI/SHRI)))/2*
((BODI/SHRI)*((INCI+CORB)/(INCI/SHRI)))/2*(HEIG+CORH)))/1000
Die Variablen sind HEIGH / CORH / FREA....
Ich also zum Regal und das Dragon Book ausgepackt. Angefangen und....in ABAP machte es einfach keinen Spaß.
Also, es gibt die FuBa "CHECK_FORMULA" und "EVAL_FORMULA". Die haben dann geholfen.

Grüße

Udo

Re: Berechnungsformeln mit variablen Operatoren verwenden

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Vielleicht hilft dir der Funktionsbaustein EVAL_FORMULA


Seite 1 von 1

Vergleichbare Themen

4
Antw.
3272
Views
Wert einer Variablen im Code verwenden
von Indra » 06.09.2016 09:42 • Verfasst in ABAP® für Anfänger
3
Antw.
747
Views
Leerzeichen mit Operatoren CA und NA finden?
von Alexity » 08.08.2019 13:07 • Verfasst in ABAP® für Anfänger
3
Antw.
3517
Views
Logische Operatoren und binäre Zahlen
von Barney » 22.01.2014 15:01 • Verfasst in ABAP® für Anfänger
3
Antw.
3123
Views
Aufsplitten von Variablen
von Ranganga » 16.05.2007 13:59 • Verfasst in ABAP® für Anfänger
2
Antw.
2941
Views
Variablen im Workflow
von Nordlicht » 17.06.2021 08:19 • Verfasst in Dialogprogrammierung

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Mahnung erstellen
vor 22 Stunden von wreichelt 2 / 42
Absprung VA02 Position
Gestern von gs3rr4 gelöst 3 / 56
OPD Druck im SPOOL
Gestern von Manfred K. 1 / 34

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Mahnung erstellen
vor 22 Stunden von wreichelt 2 / 42
Absprung VA02 Position
Gestern von gs3rr4 gelöst 3 / 56
OPD Druck im SPOOL
Gestern von Manfred K. 1 / 34

Unbeantwortete Forenbeiträge

OPD Druck im SPOOL
Gestern von Manfred K. 1 / 34
Export von Spools in XLSX
vor 6 Tagen von abapamateur 1 / 449