CX_VALUE
Klassenhierarchie
- CX_CLASS
- CX_AMOUNT
- CX_NUMERIC
- CX_VALUE
- CX_NUMERIC
- CX_AMOUNT
Beschreibung:
Diese Klasse erlaubt es, reelle Zahlen mit einer Einheit anzugeben. Da jedes Objekt dieser Klasse seine Einheit kennt, ist für einen Wert gewährleistet, dass nur erlaubte arithmetische Operationen möglich sind: z.B. ist "1 m + 5 h" eine unerlaubte Addition, während "1 m + 30 cm" den Wert "1,3 m" ergibt. Ein Wert kann zudem auch einheitslos werden: dieser Zustand kann bei Rechenoperationen, wie z.B. "5 m / 3 cm", entstehen und wird durch ein Wert ohne Einheit dargestellt: z.B. "1,2356".
Da in verschiedenen Ländern andere Einheiten verwendet werden und diese gleichzeitig im System gehalten werden können, müssen die Ergebnisse nach der Berechnung potenziell in die gewünschte Zieleinheit überführt werden. In den USA wird beispielsweise statt "Liter" die Einheit "Galone" verwendet. Um nach einer Rechenoperation die gewünschte Einheit zu erhalten, stehen die Funktionen Convert bzw. ConvertWeak zur Verfügung.
Code-Beispiel:
Var(value1, value2)
CreateTransObject(CX_VALUE) -> value1 // CX_VALUE erzeugen
"50cm" value1 Put // und Wert zuweisen
.................
55.4m -> value2 // oder so
................
value1 value2 += // Ergebnis : value1 = 5590cm
Sonderfall Temperaturen
Temperaturen werden üblicher Weise in °C, °F oder Kelvin angegeben. Diese Angaben werden vom ClassiX-System ebenfalls unterstützt. Da °C und °F jedoch keine einfachen Faktoren sind, (10°C + 10°C ≠ 2 · 10°C ≠ 20°C) wird beim Anlegen eines CX_VALUE mit °C oder °F (224347) der Wert implizit in Kelvin umgewandelt. Per CX_VALUE։։Convert kann eine Temperatur dennoch explizit in °C oder °F umgerechnet werden, jedoch lassen sich diese Werte anschließend nicht mit anderen Einheiten verrechnen.
Default Werte
CreateTransObject(CX_VALUE) erzeugt ein Objekt
- mit der im ClassiX-System angemeldeten Maßeinheit, siehe SetDefaultUnit und
- mit soviel Nachkomma-Stellen, wie es für diese Einheit vorgegeben ist.
Wurde SetDefaultUnit noch nicht aufgerufen, ist die Standard-Eiheit "Stück". Diese Einheit hat standardmäßig 0 Nachkommastellen.
Darstellung am Bildschirm
Zur Darstellung von Objekten dieser Klasse existieren folgende Möglichkeiten:
1. Verwendung eines Oberflächenobjektes vom Typ String. In diesem Fall wird das Objekt in einem einzigen Eingabefeld angegeben. Damit die Einheit beim Export mit angezeigt wird, ist das Flag NF_DIMENSIONED zu verwenden. Werden keine Flags übergeben, so werden standardmäßig die Flags NF_DIMENSIONED und NF_AUTOMATIC_DECIMALS verwendet. Folgende Abbildung zeigt ein Beispiel (Programmcode):
2. Die Verwendung von zwei Oberflächenobjekten vom Typ String, wobei in dem einen der Zahlenanteil und in dem anderen die Einheit eingegeben wird. Dabei kann auch das Oberflächenobjekt Numeric zur Verwaltung des Zahlenanteils dienen. Für die Einheit besteht die Möglichkeit, die Felder Enumeration bzw. Combo zu benutzen, so dass dem Benutzer eine Auswahl an Einheiten zur Verfügung gestellt werden kann (Programmcode):
Anmerkung: Die Bestandteile einer zusammengesetzten Einheit werden in ClassiX® durch das Multiplikationszeichen "*" und den im System eingestellten Trenner für Bruchzahlen (z.B. "/") voneinander getrennt angezeigt. Dabei ist zu beachten, dass ohne Klammerung gearbeitet wird, um die Ausgabe einer Einheit nicht zu verkomplizieren. Somit entspricht die Einheit "m/s*kg" der Einheit "m/(s*kg)" und nicht der Einheit "m*kg/s".
Im Zusammenhang mit diesen Darstellungsmöglichkeiten und bestimmten InstantView®- Anweisungen spielen die zum Objekt gehörigen Flags eine wichtige Rolle, da mit Ihnen die Darstellung des Objekts modifiziert werden kann.
Verhalten bei Put
Für den Import gelten bezüglich der precision für CX_VALUE die gleichen Regeln, wie für CX_NUMERIC.
ParameterTyp | Beispiel | Verhalten |
---|---|---|
CX_VALUE | 3€ | Nummerischer Wert wird mit Einheit in das Zielobjekt übernommen. Die Einheit ? wird hierbei wie eine reguläre Einheit behandelt. |
CX_NUMERIC | 1.25 | Nummerischer Wert wird übernommen und die Einheit bleibt unverändert. |
INTEGER | 7 | |
STRING | "" "7" |
Ein String ohne Einheit wird als Zahl interpretiert und genauso behandelt, als wäre die Zahl auf dem Stack übergeben worden. Ein Leerstring wird dabei wie die Zahl 0 interpretiert. Auch hier verändert sich die Einheit also nicht. |
STRING | "€" "?" |
Ein String der nur aus einer Einheit besteht wird als CX_VALUE mit dem nummerischen Wert 0 interpretiert. Der nummerische Wert wird also auf 0 gesetzt und die Einheit aus dem String übernommen. ? wird auch hier wie eine reguläre Einheit behandelt. |
STRING | "7€" | Ein String, der aus Einheit und Zahl besteht, wird ebenfalls als CX_VALUE interpretiert und genauso importiert, als würde stattdessen ein CX_VALUE auf dem Stack liegen. |
Operator | Kurzbeschreibung |
---|---|
+, -, *, / | Arithmetik |
+=, -=, *=, /= | Arithmetik |
>, <, = | Vergleiche |
Funktion | MA* | Parameter | Rückgabe | Kurzbeschreibung |
---|---|---|---|---|
abs | OBJECT | Wert ohne Vorzeichen | ||
arc | OBJECT | Bogenmaß | ||
arccos | OBJECT | Arcus-Kosinus | ||
arcsin | OBJECT | Arcus-Sinus | ||
arctan | OBJECT | Arcus-Tangens | ||
AutoFormat | INTEGER, INTEGER | OBJECT | Liefert ein, entsprechend der gegeben Anzahl von Vor- und Nachkommastellen, formatiertes CX_VALUE Objekt zurück. | |
ceil | OBJECT | Kleinste ganze Zahl größer als Objekt | ||
ChangeUnitName | (MLSTRING) | Einheit umbenennen | ||
Convert | (STRING) | OBJECT | Konvertieren in eine andere Einheit | |
ConvertWeak | (STRING) | OBJECT | wie Convert, beim Fehler NULL zurück | |
CopyUnitName | (INTEGER) | Einheitsname ändern | ||
cos | OBJECT | Kosinus | ||
cosh | OBJECT | Kosinus-Hyperbolikus | ||
cot | OBJECT | Kotangens | ||
DigitalHours | Ein-/Ausgabesteuerung von Zeit-Einheiten | |||
EqualUnit | (OBJECT) | INTEGER | Überprüft, ob zwei Werte die gleiche Einheit besitzen | |
exp | OBJECT | Exponent | ||
floor | OBJECT | Größte ganze Zahl kleiner als Objekt | ||
Get1Value | OBJECT | Rückgabe: Zahl mit Wert 1 | ||
GetUnitParameter | OBJECT | Rückgabe: Einheit | ||
GetValue | OBJECT | Rückgabe: Objekt als Wert | ||
GetValuePer | OBJECT | Rückgabe: Objekt als Wertebruch | ||
ValuePer | (CX_VALUE) | OBJECT | Rückgabe: Objekt als Wertebruch | |
GrossAmount | (OBJECT) | OBJECT | Prozentwert addieren | |
HasUnit | (STRING) | INTEGER | Überprüft, ob der Wert eine bestimmte Einheit hat | |
ImportObject | (OBJECT) | INTEGER | Setzen der Zahl | |
IsArea | INTEGER | Einheiten-Bereich testen: Flächen | ||
IsCompound | INTEGER | Einheiten-Bereich testen: zusammengesetzte Einheiten | ||
IsCurrency | INTEGER | Einheiten-Bereich testen: Währungen | ||
IsDuration | INTEGER | Einheiten-Bereich testen: Zeiten | ||
IsEuroCurrency | INTEGER | Einheiten-Bereich testen: Euro-Währungen | ||
IsGeometrical | INTEGER | Einheiten-Bereich testen: Längen, Flächen oder Raumangaben | ||
IsLength | INTEGER | Einheiten-Bereich testen: Längen | ||
IsPacking | INTEGER | Einheiten-Bereich testen: Verpackungen | ||
IsPieces | INTEGER | Einheiten-Bereich testen: Stückangaben | ||
IsTemperature | INTEGER | Einheiten-Bereich testen: Temperaturen | ||
IsUserDefined | INTEGER | Einheiten-Bereich testen: selbstdefinierte Einheiten | ||
IsVolume | INTEGER | Einheiten-Bereich testen: Raumangaben | ||
IsWeight | INTEGER | Einheiten-Bereich testen: Gewichte | ||
ln | OBJECT | natürl. Logarithmus | ||
log | OBJECT | Logarithm. Basis 10 (log10 x) | ||
max | (OBJECT) | OBJECT | Vergleich "Größer" if (a > b) a else b | |
min | (OBJECT) | OBJECT | Vergleich "Kleiner" if (a < b) a else b | |
NetAmount | (OBJECT) | OBJECT | Division mit Prozentwert | |
pow | (OBJECT) | OBJECT | Berechnet Zahl hoch Parameter-Zahl xy | |
RateOfLastConversion | OBJECT | Rückgabe: letzte Konvertierungsrate, die mit UnitConvert oder UnitCrossConvert von Einheiten- Konvertierungstabelle ausgeführt wurde. | ||
ResetUnitName | Änderungen von ChangeUnitName und CopyUnitName zurücknehmen. | |||
round | (OBJECT) | OBJECT | wie Round , nur mit Rückgabe des Objektes | |
RoundAutomatically | OBJECT | Runden der Zahl mit der Präzision, die sich aus der Einheit ergibt | ||
RoundByPrecision | Runden mit aktueller Präzision | |||
SetDefaultCurrency | Standard-Währungseinheit setzen | |||
SetDefaultUnit | vorgegebene Einheit ändern | |||
SetValue | STRING, INTEGER | Zeichenkette als Wert importieren | ||
sin | OBJECT | Sinus | ||
sinh | OBJECT | Sinus-Hyperbolikus | ||
sqrt | OBJECT | Quadrat-Wurzel | ||
tan | OBJECT | Tangens | ||
tanh | OBJECT | Tangens-Hyperbolikus | ||
truncate | (OBJECT) | OBJECT | wie Truncate , nur mit Rückgabe des Objektes | |
Unit | * | Ein-/Ausgabesteuerung der Einheit als Text | ||
UnitEnum | * | Ein-/Ausgabesteuerung der Einheit als interner Wert | ||
UnitNumber | INTEGER | Interner Wert der einfachen Einheit | ||
ValuePer | CX_VALUE | CX_VALUE_PER | Erstellt einen Wertebruch (CX_VALUE_PER) | |
Add | CX_AMOUNT | CX_AMOUNT | Operator + als Funktion | |
AddAssign | CX_AMOUNT | Operator += als Funktion | ||
AdjustPrecision | Anpassen der Genauigkeit | |||
Amount | OBJECT | Rückgabe des Objektswertes | ||
AmountWeak | CX_AMOUNT | |||
ChangeSign | Vorzeichen umdrehen | |||
DiscreteRange | (OBJECT, OBJECT, OBJECT) | INTEGER | Zahlbereich testen | |
DivAssign | CX_AMOUNT | Operator /= als Funktion | ||
Divide | CX_AMOUNT | CX_AMOUNT | Operator / als Funktion | |
GetFraction | OBJECT | Zahl in Bruchzahl-Form | ||
GetNumeric | OBJECT | Rückgabe: Objekt als reelle Zahl | ||
InWords | (INTEGER, INTEGER) | MLSTRING | Zahl in Zahlwörter umsetzen | |
IsNegative | INTEGER | Negatives Vorzeichen testen | ||
IsZero | INTEGER | Zahl auf Null testen | ||
MulAssign | CX_AMOUNT | Operator *= als Funktion | ||
Multiply | CX_AMOUNT | CX_AMOUNT | Operator * als Funktion | |
PercentDifference | (OBJECT) | OBJECT | Differenz von zwei Zahlen als Prozentwert | |
Precision | * | Verändern der Genauigkeit | ||
PrecisionAdjusted | OBJECT | wie AdjustPrecision, nur mit Rückgabe des Objektes | ||
Reciprocal | OBJECT | Kehrwertbildung | ||
Round | (INTEGER) | Runden der Zahl | ||
Rounded | (INTEGER) | |||
SetNumeric | STRING, INTEGER | Zeichenkette als Zahl importieren | ||
SetPrecision | (INTEGER) | Anzahl an Nachkommastellen setzen | ||
SetZero | Zahl auf Null setzen | |||
string | INTEGER | CX_STRING | Liefert die String-Darstellung des Objektes | |
SubAssign | CX_AMOUNT | Operator -= als Funktion | ||
Subtract | CX_AMOUNT | CX_AMOUNT | Operator - als Funktion | |
Truncate | (INTEGER) | Abschneiden von Nachkommastellen |
Zudem sind für jede Einheit zwei übliche Anzahlen an Nachkommastellen vordefiniert. Diese lassen sich über die folgenden (statischen) Funktionen abfragen:
Funktionsname | Kurzbeschreibung |
---|---|
UnitPrecision | nationale Genauigkeit der Einheit |
RateTablePrecision | internationale Genauigkeit der Einheit |
Datenfeld | Typ | Referenz-Klasse | I* | Kurzbeschreibung |
---|---|---|---|---|
this | CX_NUMERIC | Die Zahl |
* I = Indizierbares Datenfeld
Modul | Kurzbeschreibung |
---|---|
calcula.mod | Einheiten-Taschenrechner Modul |
qm\tmprture_qm.mod | Konvertierungen zwischen Temperaturen Editiermodul |