Erstellen einer einfachen Umrechnungsfamilie und Hinzufügen von Maßeinheiten (C++)
Nach oben zu Umrechnen von Maßeinheiten (C++)
Inhaltsverzeichnis
Sie können beispielsweise eine neue Umrechnungsfamilie definieren und Typen für neue Maßeinheiten hinzufügen, wenn Zeitangaben über lange Zeiträume umzurechnen sind (z.B. Monate in Jahrhunderte) und die Angabe durch die Umwandlung an Genauigkeit verlieren kann.
Dies soll anhand eines Beispiels näher erläutert werden. Die Familie cbTime verwendet als Grundeinheit Tage. Die Grundeinheit ist diejenige Einheit, die allen Umrechnungen innerhalb dieser Familie zugrunde gelegt wird. Folglich müssen alle Umrechnungen in Tagen erfolgen. Ungenauigkeiten können auftreten, wenn die Umrechnung mit der Einheit Monate oder einer größeren Einheit (Monate, Jahre, Jahrzehnte, Jahrhunderte, Jahrtausende) erfolgt, da zwischen Tagen und Monaten, Tagen und Jahren etc. keine genaue Umrechnung möglich ist. Monate haben eine unterschiedliche Länge. Bei Jahren müssen Schaltjahre berücksichtigt werden usw.
Werden in den Zeitangaben nur Maßeinheiten verwendet, die größer oder gleich Monate sind, dann kann eine genauere Umrechnungsfamilie mit der Grundeinheit Jahre erstellt werden. Im folgenden Beispiel wird eine neue Umrechnungsfamilie namens cbLongTime definiert.
Deklarieren von Variablen
Zuerst müssen Variablen für die Bezeichner deklariert werden. Die Bezeichner werden in der neuen Umrechnungsfamilie LongTime und den Maßeinheiten dieser Familie verwendet:
tConvFamily cbLongTime;
TConvType ltMonths;
TConvType ltYears;
TConvType ltDecades;
TConvType ltCenturies;
TConvType ltMillennia;
Registrieren der Umrechnungsfamilie
Als Nächstes muss die Umrechnungsfamilie registriert werden:
cbLongTime = RegisterConversionFamily("Long Times");
Obwohl die Prozedur UnregisterConversionFamily zur Verfügung steht, brauchen Sie die Registrierung von Umrechnungsfamilien nur dann aufzuheben, wenn die definierende Unit zur Laufzeit entfernt wird. Die Registrierung wird beim Beenden der Anwendung automatisch bereinigt.
Registrieren der Maßeinheiten
Anschließend müssen die Maßeinheiten der soeben erstellten Umrechnungsfamilie registriert werden. Hierzu wird die Funktion RegisterConversionType verwendet, die zur Registrierung von Maßeinheiten einer angegebenen Familie dient. Sie müssen die Grundeinheit (in diesem Beispiel "Jahre") definieren. Die übrigen Maßeinheiten werden mithilfe eines Umrechnungsfaktors festgelegt, der deren Verhältnis zur Grundeinheit bezeichnet. Beispielsweise wird für ltMonths der Faktor 1/12 angegeben, da die Familie LongTime die Grundeinheit Jahre hat. Sie können auch eine Beschreibung für die Einheiten angeben, in die umgerechnet wird.
Der Quelltext zur Registrierung der Maßeinheiten lautet wie folgt:
ltMonths = RegisterConversionType(cbLongTime, " Months ", 1 / 12);
ltYears = RegisterConversionType(cbLongTime, " Years ", 1);
ltDecades = RegisterConversionType(cbLongTime, " Decades ", 10);
ltCenturies = RegisterConversionType(cbLongTime, " Centuries ", 100);
ltMillennia = RegisterConversionType(cbLongTime, " Millennia ", 1000);
Verwenden der neuen Maßeinheiten
Die registrierten Maßeinheiten können jetzt in Umrechnungen verwendet werden. Die globale Funktion Convert kann Zeitangaben beliebig zwischen den in der Umrechnungsfamilie cbLongTime registrierten Einheiten umrechnen.
Anstelle des folgenden Aufrufs von Convert
Convert(StrToFloat(Edit1->Text), tuMonths, tuMillennia);
kann nun der folgende Aufruf für genauere Umrechnungen eingesetzt werden:
Convert(StrToFloat(Edit1->Text), ltMonths, ltMillennia);