Umrechnungsfunktionen verwenden

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Maßeinheiten umrechnen


In Fällen, in denen die Umrechnung komplizierter ist, können Sie eine andere Syntax verwenden und die Umrechnung durch eine Funktion statt eines Umrechnungsfaktors definieren. Beispielsweise können Temperaturangaben nicht mit einem Umrechnungsfaktor umgerechnet werden, da die Temperaturskalen unterschiedliche Ursprünge besitzen.

Das folgende Beispiel, das der Unit StdConvs entnommen wurde, zeigt, wie ein Umrechnungstyp registriert wird, indem Funktionen zur Umrechnung von Werten bereitgestellt werden.

Variablen deklarieren

Zuerst müssen Variablen für die Bezeichner deklariert werden. Die Bezeichner werden in der neuen Umrechnungsfamilie cbTemperature und den Maßeinheiten dieser Familie verwendet:

Delphi:

var
cbTemperature: TConvFamily;
tuCelsius: TConvType;
tuKelvin: TConvType;
tuFahrenheit: TConvType;

C++:

TConvFamily cbTemperature;
TConvType tuCelsius;
TConvType tuKelvin;
TConvType tuFahrenheit;


Anmerkung:  Die hier aufgeführten Maßeinheiten bilden eine Teilmenge der Temperaturmaße, die in der Unit StdConvs tatsächlich registriert sind.

Umrechnungsfamilie registrieren

Als Nächstes muss die Umrechnungsfamilie registriert werden:

Delphi:

cbTemperature := RegisterConversionFamily ('Temperature');

C++:

cbTemperature = RegisterConversionFamily("Temperature");

Grundeinheit registrieren

Anschließend definieren und registrieren Sie die Grundeinheit der Umrechnungsfamilie. In diesem Beispiel ist Grad Celsius die Grundeinheit. Beachten Sie, dass bei der Grundeinheit ein einfacher Umrechnungsfaktor angegeben werden kann, da hier keine Umrechnung erforderlich ist:

Delphi:

 tuCelsius:=RegisterConversionType(cbTemperature,'Celsius',1);

C++:

tuCelsius = RegisterConversionType(cbTemperature, "Celsius", 1);

Methoden zum Umrechnen in die und aus der Grundeinheit definieren

Sie müssen Funktionen definieren, die Werte der verschiedenen Temperaturskalen in Grad Celsius umrechnen, da ein einfacher Umrechnungsfaktor hierfür nicht ausreicht. Die folgenden Funktionen wurden aus der Unit StdConvs übernommen:

Delphi:

 function FahrenheitToCelsius(const AValue: Double): Double;
 begin
   Result := ((AValue - 32) * 5) / 9;
 end;
 function CelsiusToFahrenheit(const AValue: Double): Double;
 begin
   Result := ((AValue * 9) / 5) + 32;
 end;
 function KelvinToCelsius(const AValue: Double): Double;
 begin
   Result := AValue - 273.15;
 end;
 function CelsiusToKelvin(const AValue: Double): Double;
 begin
   Result := AValue + 273.15;
 end;

C++:

double __fastcall FahrenheitToCelsius(const double AValue) {
    return (((AValue - 32) * 5) / 9);
}

double __fastcall CelsiusToFahrenheit(const double AValue) {
    return (((AValue * 9) / 5) + 32);
}

double __fastcall KelvinToCelsius(const double AValue) {
    return (AValue - 273.15);
}

double __fastcall CelsiusToKelvin(const double AValue) {
    return (AValue + 273.15);
}

Weitere Maßeinheiten registrieren

Nach der Definition der Umrechnungsfunktionen können Sie weitere Maßeinheiten für die Umrechnungsfamilie registrieren. Sie geben zudem Beschreibungen dieser Maßeinheiten an.

Mit folgendem Quelltext werden die weiteren Maßeinheiten der Umrechnungsfamilie registriert:

Delphi:

tuKelvin := RegisterConversionType(cbTemperature, 'Kelvin', KelvinToCelsius, CelsiusToKelvin);
tuFahrenheit := RegisterConversionType(cbTemperature, 'Fahrenheit', FahrenheitToCelsius, CelsiusToFahrenheit);

C++:

tuKelvin = RegisterConversionType(cbTemperature, "Kelvin", KelvinToCelsius,
		CelsiusToKelvin);
tuFahrenheit = RegisterConversionType(cbTemperature, "Fahrenheit",
		FahrenheitToCelsius, CelsiusToFahrenheit);

Neue Maßeinheiten verwenden

Die registrierten Maßeinheiten stehen nun Anwendungen für Umrechnungen zur Verfügung. Die globale Funktion Convert kann Temperaturwerte beliebig zwischen den in der Umrechnungsfamilie cbTemperature registrierten Einheiten umrechnen. Mit der folgenden Anweisung wird beispielsweise ein Wert von Grad Fahrenheit in Grad Kelvin umgerechnet.

Delphi:

Convert(StrToFloat(Edit1.Text), tuFahrenheit, tuKelvin);

C++:

Convert(StrToFloat(Edit1->Text), tuFahrenheit, tuKelvin);

Siehe auch