Arithmetik
Die folgenden Übersichten zeigen die mathematischen Operatoren und die Operanden mit denen eine Prozentzahl verknüpft werden kann ( alle Ergebnisse entsprechen den Prioritätsregeln ):
CX_PERCENT wird grundsätzlich wie ein Vielfaches von 0.01 behandelt(3). Bei der Addition/Subtraktion mit einem anderen Typen folgt es der Logik eines kaufmännischen Taschenrechners von Aufschlag und Abschlag(3.1).
Addition
Die Addition mit einem Prozent-Wert ist im betriebswirtschaftlichen Sinne zu verstehen: x% auf den Preis aufgeschlagen bedeutet, dass der Preis um x% seines Wertes erhöht wird. Zu beachten ist, dass hierdurch die Addition nicht mehr assoziativ und auch nicht kommutativ ist(2.1)*:
3 = 1 + (100% + 100%) != (1 + 100%) + 100% = 2 + 100% = 4
In InstantView-Schreibweise:
1 100% 100% + + 1 100% + 100% +
*= Die Kommutativität von CX_PERCENT wurde aufgrund der kaufmännischen Interpretation der Addition ausgesetzt, die bei Kommutativität zur Verwirrung führt. Zum einen entspricht die Schreibweise "5 + 20%" der Beschreibung, einen Aufschlag auf einen Grundwert aufzuaddieren. Die Schreibweise "20% + 5" legt aber nahe, dass hier 5 Prozentpunkte auf die 20% aufaddiert werden und das Ergebnis 25% wäre und kein 20%-iger Aufschlag auf 5.
Besonders verwirrend wird es bei der Subtraktion: Schreibt man "5 - 20%", dann ist klar, dass es sich um einen 20%-igen Abschlag von 5 handelt. "20% - 5" legt aber wiederum die Änderung der Prozentpunkte nahe und wäre durch die Kommutativität eindeutig definiert als:
20% - 5 = 20% + (-5) = (-5) + 20% = (-5) * 1.2 = (-6)
was ziemlich sicher nicht die Intention des Schreibers ist.
Um solche irreführenden Interpretationen zu vermeiden, wird ist CX_PERCENT (+|-|+=|-=) X (X≠CX_PERCENT) als Fehler definiert.(2.1)
CX_PERCENT | + | INTEGER | = | Fehler |
---|---|---|---|---|
15% | + | 10 | = | nicht erlaubt(2.1) |
INTEGER | + | CX_PERCENT | = | CX_NUMERIC |
10 | + | 15% | = | 11,5(3.1) |
CX_PERCENT | + | CX_NUMERIC | = | Fehler |
---|---|---|---|---|
15% | + | 10 | = | nicht erlaubt(2.1) |
CX_NUMERIC | + | CX_PERCENT | = | CX_NUMERIC |
10 | + | 15% | = | 11,5(3.1) |
CX_PERCENT | + | CX_PERCENT | = | CX_PERCENT |
---|---|---|---|---|
15% |
+ |
10% |
= |
25%(3) |
CX_PERCENT | + | CX_FRACTION | = | Fehler |
---|---|---|---|---|
50% | + | 1/2 | = | nicht erlaubt(2.1) |
CX_FRACTION | + | CX_PERCENT | = | CX_FRACTION |
1/2 | + | 50% | = | 3/4(3.1) |
CX_PERCENT | + | CX_VALUE | = | Fehler |
---|---|---|---|---|
50% | + | 10 Stück | = | nicht erlaubt(2.1) |
CX_VALUE | + | CX_PERCENT | = | CX_VALUE |
10 Stück | + | 50% | = | 15 Stück(3.1) |
CX_PERCENT | + | CX_VALUE_PER | = | Fehler |
---|---|---|---|---|
50% | + | 1 €/2 Stück | = | nicht erlaubt(2.1) |
CX_VALUE_PER | + | CX_PERCENT | = | CX_VALUE_PER |
1 €/2 Stück | + | 50% | = | 1,5 €/2 Stück(3.1) |
CX_PERCENT | + | CX_FORMULA | = | Fehler |
---|---|---|---|---|
15% | + | Formel | = | nicht erlaubt(2.1) |
CX_FORMULA | + | CX_PERCENT | = | CX_NUMERIC, CX_VALUE oder CX_PERCENT |
Formel | + | 15% | = | Zahl |
Anmerkung: Bevor die Addition ausgeführt wird, wird die Formel ausgewertet. Das eigentliche Addieren wird nur dann ausgeführt, wenn das Ergebnis ein Objekt ist, welches zu einer Prozentzahl addiert werden darf. Ist dies der Fall, so entsteht Zahl als Ergebnis.
CX_PERCENT | + | CX_CONDITIONED_BAG | = | Fehler |
---|---|---|---|---|
15% | + | bedingte Objekttabelle | = | nicht erlaubt(2.1) |
CX_CONDITIONED_BAG | + | CX_PERCENT | = | CX_NUMERIC, CX_VALUE oder CX_PERCENT |
bedingte Objekttabelle | + | 15% | = | Zahl |
Anmerkung: Bevor die Addition ausgeführt wird, wird das entsprechende Objekt aus der bedingten Objekttabelle ermittelt. Das eigentliche Addieren wird nur dann ausgeführt, wenn dieses Objekt zu einer Prozentzahl addiert werden darf. Ist dies der Fall, so entsteht Zahl als Ergebnis.
Subtraktion
Prozentwerte können im kaufmännischen Sinne von Zahlen abgezogen werden(3.1). Von einem Prozentwert können aber nur Prozentwerte abgezogen werden. Diese werden dann als Zahlen verrechnet.(3)
Zieht man andere Werte von Prozentwerten ab, führt dies zu einem Fehler.(2.1)
INTEGER | - | CX_PERCENT | = | CX_NUMERIC |
---|---|---|---|---|
2 | - | 50% | = | 1(3.1) |
CX_PERCENT | - | CX_PERCENT | = | CX_PERCENT |
---|---|---|---|---|
50% |
- |
20% |
= |
30%(3) |
CX_NUMERIC | - | CX_PERCENT | = | CX_NUMERIC |
---|---|---|---|---|
10 | - | 50% | = | 5(3.1) |
CX_FRACTION | - | CX_PERCENT | = | CX_FRACTION |
---|---|---|---|---|
1/2 | - | 50% | = | 1/4(3.1) |
CX_VALUE | - | CX_PERCENT | = | CX_VALUE |
---|---|---|---|---|
15 Stück | - | 50% | = | 7,5 Stück(3.1) |
CX_VALUE_PER | - | CX_PERCENT | = | CX_VALUE_PER |
---|---|---|---|---|
1 €/2 Stück | - | 50% | = | 0,5 €/2 Stück(3.1) |
CX_FORMULA | - | CX_PERCENT | = | CX_NUMERIC, CX_VALUE oder CX_PERCENT |
---|---|---|---|---|
Formel | - | 50% | = | Zahl |
Anmerkung: Bevor die Subtraktion ausgeführt wird, wird die Formel ausgewertet. Das eigentliche Subtrahieren wird nur dann ausgeführt, wenn das Ergebnis ein Objekt ist, welches zu einer Prozentzahl subtrahiert werden darf. Ist dies der Fall, so entsteht Zahl als Ergebnis.
CX_CONDITIONED_BAG | - | CX_PERCENT | = | CX_NUMERIC, CX_VALUE oder CX_PERCENT |
---|---|---|---|---|
bedingte Objekttabelle | - | 50% | = | Zahl |
Anmerkung: Bevor die Subtraktion ausgeführt wird, wird das entsprechende Objekt aus der bedingten Objekttabelle ermittelt. Das eigentliche Subtrahieren wird nur dann ausgeführt, wenn dieses Objekt zu einer Prozentzahl subtrahiert werden darf. Ist dies der Fall, so entsteht Zahl als Ergebnis.
Multiplikation
Bei der Multiplikation verhält sich CX_PERCENT mathematisch korrekt wie Hundertstel(3). Dies entspricht der Reduktion eines Wertes auf x%. Auch hier ist die Operation nicht kommutativ, weil "20% * 3.0" ein Ergebnis von 60% nahelegt anstatt 0.6, was mathematisch natürlich das gleiche ist, jedoch aufgrund der geänderten Semantik von X + CX_PERCENT in ClassiX nicht gleich behandelt werden kann. Um den Leser von Berechnungen nicht zu verwirren, ist die Operation CX_PERCENT * X (X != CX_PERCENT) verboten.
CX_PERCENT | * | INTEGER | = | Fehler |
---|---|---|---|---|
50% | * | 2 | = | nicht erlaubt(2.1) |
INTEGER | * | CX_PERCENT | = | CX_NUMERIC |
2 | * | 50% | = | 1(3) |
CX_PERCENT | * | CX_PERCENT | = | CX_PERCENT |
---|---|---|---|---|
50% |
* |
10% |
= |
5%(3) |
CX_PERCENT | * | CX_NUMERIC | = | Fehler |
---|---|---|---|---|
50% | * | 2 | = | nicht erlaubt(2.1) |
CX_NUMERIC | * | CX_PERCENT | = | CX_NUMERIC |
2 | * | 50% | = | 1(3) |
CX_PERCENT | * | CX_FRACTION | = | Fehler |
---|---|---|---|---|
50% | * | 1/2 | = | nicht erlaubt(2.1) |
CX_FRACTION | * | CX_PERCENT | = | CX_FRACTION |
1/2 | * | 50% | = | 1/4(3) |
CX_PERCENT | * | CX_VALUE | = | Fehler |
---|---|---|---|---|
50% | * | 2 Stück | = | nicht erlaubt(2.1) |
CX_VALUE | * | CX_PERCENT | = | CX_VALUE |
2 Stück | * | 50% | = | 1 Stück(3) |
CX_PERCENT | * | CX_VALUE_PER | = | Fehler |
---|---|---|---|---|
50% | * | 1 €/2 Stück | = | nicht erlaubt(2.1) |
CX_VALUE_PER | * | CX_PERCENT | = | CX_VALUE_PER |
1 €/2 Stück | * | 50% | = | 0,5€ €/2 Stück(3) |
CX_PERCENT | * | CX_FORMULA | = | CX_NUMERIC, CX_VALUE oder CX_PERCENT |
---|---|---|---|---|
50% | * | Formel | = | Zahl |
CX_FORMULA | * | CX_PERCENT | = | CX_NUMERIC, CX_VALUE oder CX_PERCENT |
Formel | * | 50% | = | Zahl |
Anmerkung: Bevor die Multiplikation ausgeführt wird, wird die Formel ausgewertet. Das eigentliche Multiplizieren wird nur dann ausgeführt, wenn das Ergebnis ein Objekt ist, welches zu einer Prozentzahl multipliziert werden darf. Ist dies der Fall, so entsteht Zahl als Ergebnis.
CX_PERCENT | * | CX_CONDITIONED_BAG | = | CX_NUMERIC, CX_VALUE oder CX_PERCENT |
---|---|---|---|---|
50% | * | bedingte Objekttabelle | = | Zahl |
CX_CONDITIONED_BAG | * | CX_PERCENT | = | CX_NUMERIC, CX_VALUE oder CX_PERCENT |
bedingte Objekttabelle | * | 50% | = | Zahl |
Anmerkung: Bevor die Multiplikation ausgeführt wird, wird das entsprechende Objekt aus der bedingten Objekttabelle ermittelt. Das eigentliche Multiplizieren wird nur dann ausgeführt, wenn dieses Objekt zu einer Prozentzahl multipliziert werden darf. Ist dies der Fall, so entsteht Zahl als Ergebnis.
Division
Auch bei der Division wird der Prozentwert als Hundertstel angesehen(3).
INTEGER | / | CX_PERCENT | = | CX_INTEGER |
---|---|---|---|---|
2 | / | 50% | = | 4(3) |
CX_PERCENT | / | CX_PERCENT | = | CX_PERCENT |
---|---|---|---|---|
50% |
/ |
50% |
= |
100%(3) |
CX_NUMERIC | / | CX_PERCENT | = | CX_NUMERIC |
---|---|---|---|---|
2 | / | 50% | = | 4(3) |
CX_FRACTION | / | CX_PERCENT | = | CX_FRACTION |
---|---|---|---|---|
1/2 | / | 50% | = | 1(3) |
CX_VALUE | / | CX_PERCENT | = | CX_VALUE |
---|---|---|---|---|
2 Stück | / | 50% | = | 4 Stück(3) |
CX_VALUE_PER | / | CX_PERCENT | = | CX_VALUE_PER |
---|---|---|---|---|
1 €/2 Stück | / | 50% | = | 2 €/2 Stück(3) |
CX_FORMULA | / | CX_PERCENT | = | CX_NUMERIC oder CX_VALUE |
---|---|---|---|---|
Formel | / | 50% | = | Zahl |
Anmerkung: Bevor die Division ausgeführt wird, wird die Formel ausgewertet. Das eigentliche Dividieren wird nur dann ausgeführt, wenn das Ergebnis ein Objekt ist, welches eine Prozentzahl teilen darf. Ist dies der Fall, so entsteht Zahl als Ergebnis.
CX_CONDITIONED_BAG | / | CX_PERCENT | = | CX_NUMERIC oder CX_VALUE |
---|---|---|---|---|
bedingte Objekttabelle | / | 50% | = | Zahl |
Anmerkung: Bevor die Division ausgeführt wird, wird das entsprechende Objekt aus der bedingten Objekttabelle ermittelt. Das eigentliche Dividieren wird nur dann ausgeführt, wenn dieses Objekt eine Prozentzahl dividieren darf. Ist dies der Fall, so entsteht Zahl als Ergebnis.