calc (Funktionsausdruck berechnen)

Die Funktion $calc berechnet einen mathematischen Funktionsausdruck und gibt als Ergebnis einen numerischen Wert zurück. Als Funktionen stehen dabei die Wertauflöser Berechne Wert zur Verfügung.

Syntax

$calc(expression)

Parameter

Name

Beschreibung

expression

Ein mathematischer Funktionsausdruck. Nicht reservierte Buchstaben werden dabei als Einheit-Alias interpretiert.

z.B.
"5 * 7 - 2" (Punkt und Strichrechnungen)
"5 * (7 - 2)" (Klammern)
"sqrt(12) * 2" (Wurzel)
"5^2" (Exponent)
"5 % 3" (Modulo)
"15M+1H" (15 Minuten + 1 Stunde)

Rückgabewert

Das Ergebnis des Funktionsausdrucks als numerischer Wert.

Beispiele und Hinweise

Beispiel 1:

Hier wird die Quadratwurzel aus dem Elements 7 gezogen und mit 42 multipliziert.

$calc( sqrt($el(7) * 42 )


Beispiel 2:

Hier wird eine Stunde zu 15 Minuten addiert. Das Ergebnis (75 Minuten) wird in der Einheit M (Minuten) ausgegeben, da diese Einheit im Ausdruck an erster Stelle steht.

$calc(15M+1H)


Beispiel 3:

Aus zwei numerischen Wert-Elementen (187, 190) soll die Wurzel der Quadratsumme berechnet werden.

$calc( sqrt( $el(187)^2 + $el(190)^2 ) )

images/download/attachments/62864214/image2019-4-12_16-6-19-version-1-modificationdate-1610957658496-api-v2.png

images/download/attachments/62864214/image2019-4-12_16-8-40-version-1-modificationdate-1610957658532-api-v2.png

Der Berechnungsausdruck (für das Feld "Diagonale") ist hier: $calc( sqrt( $el(187)^2 + $el(190)^2 ))

Der Berechnungsausdruck enthält keine Vorkehrungen zur Einheitenumrechnung. Im Beispiel war als Ziel-Einheit für die Diagonale cm voreingestellt. Da beide Eingangsgrößen dieselbe Einheit m verwenden, ordnet der Berechnungsausdruck dem Ergebnis ebenfalls die Einheit m zu. Dass diese Einheit beim Quadrieren und anschließenden Wurzelziehen aus Angaben in Metern auch inhaltlich "passend" ist, ist allerdings Zufall und nicht das Ergebnis einer automatischen algorithmischen Schlußfolgerung. Die Umrechnung des Ergebnisses von m nach cm erfolgt automatisch nach den Regeln für Zuweisungen an Zahlenwerte mit Einheit.

►WICHTIG◄ Falls Eingangsgrößen mit unterschiedlicher Längeneinheit verwendet werden, liefert der hier verwendete Berechnungsausdruck inkorrekte Ergebnisse. Das folgende Beispiel zeigt wie Abhilfe möglich ist.


Beispiel 4:

Ausgehend vom vorigen Beispiel soll jetzt sichergestellt werden, dass die Angaben für Länge und Breite auch mit unterschiedlicher Längeneinheit korrekt verrechnet werden.

Dazu wird die convert Funktion eingesetzt (s. Berechne Wert), um beide Eingangsgrößen in die Einheit m umzurechnen. Jede andere Längeneinheit, die eine Einheitenumrechnung in die Zieleinheit für die Diagonale zulässt, könnte stattdessen verwendet werden.

$calc( sqrt( convert( $el(187),m )^2 + convert( $el (190),m ) ^2 ) )

Damit das Ergebnis (die Länge der Diagonale) immer in Zentimetern erscheint, wird diese Einheit im Formular als Standardwert hinterlegt.

images/download/attachments/62864214/image2019-4-12_16-29-43-version-1-modificationdate-1610957658546-api-v2.png

images/download/attachments/62864214/image2019-4-12_16-34-20-version-1-modificationdate-1610957658512-api-v2.png

Der Berechnungsausdruck (für das Feld "Diagonale") ist hier: $calc( sqrt(convert( $el(187),m)^2 + convert($el(190)) ^2 ))

►WICHTIG◄ Dass in diesem Beispiel Längeneinheiten in eine andere Längeneinheit umgerechnet werden, ist als Sonderfall zu betrachten. Häufig werden Längeneinheiten durch Multiplikation in Flächen- oder Volumeneinheiten umgerechnet. Dabei muss unbedingt beachtet werden. dass der Wechsel zwischen Einheiten unterschiedlicher Dimensionen in Lobster Data Platform / Orchestration nicht automatisch per Einheitenumrechnung unterstützt wird. Unter Beachtung der Regeln für Zuweisungen an Zahlenwerte mit Einheit kann der Übergang zwischen Dimensionen trotzdem auch mit veränderlichen Einheiten gelingen, wie das folgende Beispiel zeigt.


Beispiel 5, mit Umrechnungen zwischen Dimensionen:

Aus Angaben für Länge, Breite und Höhe einer Sendung (in wählbaren Längeneinheiten) soll im Formular das Ladevolumen durch Multiplikation berechnet werden:

images/download/attachments/62864214/image2019-4-15_12-58-20-version-1-modificationdate-1610957658525-api-v2.png

Unter der Voraussetzung, dass die Zieleinheit "Kubikmeter" statisch vorgegeben und deshalb im Zielelement bereits vorgewählt ist, kann die Umrechnung mit der folgenden Konfiguration geleistet werden:

images/download/attachments/62864214/image2019-4-15_13-3-34-version-1-modificationdate-1610957658556-api-v2.png

Der Berechnungsausdruck (für das Feld "Ladevolumen") ist hier: $calc( convert( $el(187),m) * convert($el(190),m) * convert( $el(243), m))

  • Die Werte für Länge, Breite und Höhe (Element IDs #187, #190 und #243) werden hier per convert in Meter umgerechnet und dann multipliziert. Der Zahlenwert des Ergebnisses entspricht dadurch Kubikmetern (m³), auch wenn er formal in Meter (m) zurückgegeben wird.

  • Da beim Zuweisen dieses Ergebnisses in ein Zielelement mit Einheit Kubikmeter die Einheitenumrechnung von m nach nicht automatisch unterstützt wird, wird der Zahlenwert direkt zugewiesen, so dass für das Ladevolumen eine korrekte Kombination von Wert und Einheit entsteht.

Ausgehend von diesem Wert kann das berechnete Ladevolumen auch in andere Volumeneinheiten umgerechnet werden. Allerdings muss dazu ein weiteres numerisches Attribut, etwa Ladevolumen (umrechenbar), eingeführt werden, das als Berechnungsausdruck einen Verweis auf das weiterhin in Kubikmetern berechnete Ladevolumen erhält. Wenn für das Einheit-Element von Ladevolumen (umrechenbar) die Option Wert konvertieren (s. Zahlenangabe mit Einheit) gesetzt ist, erfolgt die Umrechnung des Wert automatisch beim Wechseln der Einheit:

images/download/attachments/62864214/image2019-4-15_13-16-10-version-1-modificationdate-1610957658528-api-v2.png

►HINWEIS◄ Das Ladevolumen (in Kubikmetern) wurde hier als Zwischenergebnis inaktiv gesetzt. Es könnte auch unsichtbar gesetzt werden. Ein Berechnungsausdruck wird nur ausgewertet, wenn eine sich Referenz ändert, oder, falls er keine Referenz enthält, nur einmal zur Ladezeit des Formulars.