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 / 4395 / 223 / 1182 ) »
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.
3205
Views
Wert einer Variablen im Code verwenden
von Indra » 06.09.2016 09:42 • Verfasst in ABAP® für Anfänger
3
Antw.
651
Views
Leerzeichen mit Operatoren CA und NA finden?
von Alexity » 08.08.2019 13:07 • Verfasst in ABAP® für Anfänger
3
Antw.
3229
Views
Logische Operatoren und binäre Zahlen
von Barney » 22.01.2014 15:01 • Verfasst in ABAP® für Anfänger
3
Antw.
3053
Views
Aufsplitten von Variablen
von Ranganga » 16.05.2007 13:59 • Verfasst in ABAP® für Anfänger
2
Antw.
2168
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

Trennen Strasse und Hausnummer
vor einer Stunde von payten 13 / 10257
Dialog-Container mit Toolbar/Status
vor 15 Stunden von DeathAndPain gelöst 22 / 3214
Daten an Tabelle binden
vor 20 Stunden von Lukas Sanders 2 / 1075
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 653

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

Trennen Strasse und Hausnummer
vor einer Stunde von payten 13 / 10257
Dialog-Container mit Toolbar/Status
vor 15 Stunden von DeathAndPain gelöst 22 / 3214
Daten an Tabelle binden
vor 20 Stunden von Lukas Sanders 2 / 1075
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 653

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2638
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9225