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 / 4282 / 214 / 1141 ) »
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.
2956
Views
Wert einer Variablen im Code verwenden
von Indra » 06.09.2016 09:42 • Verfasst in ABAP® für Anfänger
3
Antw.
423
Views
Leerzeichen mit Operatoren CA und NA finden?
von Alexity » 08.08.2019 13:07 • Verfasst in ABAP® für Anfänger
3
Antw.
2698
Views
Logische Operatoren und binäre Zahlen
von Barney » 22.01.2014 15:01 • Verfasst in ABAP® für Anfänger
1
Antw.
696
Views
Standardrolle verwenden
von Bernd » 22.12.2004 10:14 • Verfasst in ABAP® Core
1
Antw.
2154
Views
Tab als Trennzeichen verwenden
von Gast » 20.01.2006 15:06 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

SELECT CHAR16 in CHAR12-Feld
vor einer Stunde von Patrick1982 gelöst 5 / 60
alv_grid aktualisieren
vor 6 Stunden von Egzon gelöst 4 / 82

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

SELECT CHAR16 in CHAR12-Feld
vor einer Stunde von Patrick1982 gelöst 5 / 60
alv_grid aktualisieren
vor 6 Stunden von Egzon gelöst 4 / 82

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Wochen von Lucyalison 1 / 134
Group Items auf einer Filterbar
vor 5 Wochen von Bright4.5 1 / 170