Lade...
 

CX_UNIT_RATE::UnitCrossConvert

CX_UNIT_RATE::UnitCrossConvert

Beschreibung:

Diese Funktion konvertiert ähnlich der Funktion UnitConvert

eine Einheit in eine andere. Dabei wird zunächst versucht, die Ausgangs- direkt in die Zieleinheit zu konvertieren. Ist dieses nicht möglich, so wird überprüft, ob die Ausgangseinheit einer der beiden Einheiten in dem Einheiten-Verhältnis entspricht. Ist dieses der Fall, so wird sie in die andere Einheit konvertiert. In diesem Fall wird das Ergebnis in die Ausgangs- und nicht in die Zieleinheit gespeichert. Um nachvollziehen zu können, wie konvertiert wurde, werden zwei Wahrheitswerte übergeben. Der erste zeigt an, ob eine Konversion durchgeführt wurde, der zweite, ob direkt in die gewünschte Zieleinheit konvertiert werden konnte. Diese Funktion kann somit zum Konvertieren "über mehrere Einheiten hinweg" benutzt werden. Existieren z.B. die Einheiten-Verhältnisse "1 Stange = 2,4 m" und "5 kg/m", so kann mit dieser Funktion eine Stangen-Anzahl in eine Gewichtsangabe umgerechnet werden, ohne dass zwischen diesen beiden Einheiten ein (direktes) Verhältnis definiert wurde. Um solche Umrechnungen durchzuführen, empfiehlt sich die Benutzung einer Konvertierungs-Tabelle.

Code-Beispiel:

In dem Beispiel-Programm wird eine Konvertierung von "5 Dosen" in

Beutel probiert, wobei angenommen wird, das ein Einheiten-Verhältnis von "3 Dosen = 1 Sack" definiert wurde. 

Var(unitRate, fromValue, toValue, converted)

  ...    // Definition des Einheiten-Verhältnisses, das in unitRate gespeichert wird

CreateTransObject(CX_VALUE) -> fromValue
"5 Dosen" fromValue Put
CreateTransObject(CX_VALUE) -> toValue
"0 Beutel" toValue Put
CreateTransObject(CX_NUMERIC) -> potentialLink
CreateTransObject(CX_NUMERIC) -> converted
fromValue toValue potentialLink converted unitRate Call(UnitCrossConvert)


In diesem Beispiel ist eine Konvertierung von Dosen in Beutel nicht möglich, allerdings eine von Dosen in Säcke. In dem Wahrheitswert converted wird FALSE zurückgeliefert, da eine direkte Konvertierung nicht möglich war. Da aber eine Konvertierung in Säcke durchgeführt werden konnte, wird in potentialLink TRUE zurückgegeben. Der Wert von fromValue hat sich auf "1 Sack" geändert. Der bei der Konvertierung übrigbleibende Rest von "2 Dosen" befindet sich nach dem Funktionsaufruf auf dem Stack. 

Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top CX_UNIT_RATE das Einheiten-Verhältnis
Top-1 CX_NUMERIC der Wahrheitswert, der anzeigt, ob die Konvertierung in die Zieleinheit erfolgreich war
Top-2 CX_NUMERIC der Wahrheitswert, der anzeigt, ob eine Konvertierung erfolgreich war
Top-3 CX_VALUE die Zieleinheit; nach Konvertierung ist der Nummernanteil des Wertes neu gesetzt, ansonsten bleibt er unverändert
Top-4 CX_VALUE die Ausgangseinheit
Stack(Out) Top CX_VALUE oder NULL der bei der Konvertierung übrigbleibende Rest
Funktionsaufruf: Call(UnitCrossConvert)