www

ein Webangebot von rotering-net.de

PHP-Skript: Temperatur konvertieren

Der Großteil der Weltbevölkerung verwendet heute im Alltagsgebrauch die Celsius-Skala für die Angabe von Temperaturen. Dennoch sind bspw. in anderen Teilen der Erde wie in den USA mit Fahrenheit oder in den Naturwissenschaften mit Kelvin oder Rankine weitere Skalen im Gebrauch. Daher ist es in manchen Fällen notwenig, die Temperaturen auf andere Skalen zu konvertieren. Die hier vorgestellte Funktion kann zwischen acht verschiedenen Skalen beliebig hin und her konvertieren.

Austesten

Hier können Sie zunächst einmal die Funktion des Skriptes testen. Im Gegensatz zum nachher vorgestellten Skript wird jedoch zu Anschauungzwecken nicht nur in eine bestimmte Temperaturskala konvertiert, sondern direkt in alle verfügbaren.

: in der

Syntax

float convertTemperature (float $temperature, int $from_scale, int $to_scale)

  • $temperature - Die Temperatur, welche konvertiert werden soll.
  • $from_scale - Index der Temperaturskala, in welcher die Temperatur gegeben ist.
  • $to_scale - Index der Temperaturskala, in die konvertiert werden soll.

Rückgabewerte: Es wird die konvertierte Temperatur als Gleitkommazahl zurückgegeben.

Skript

$scale = array( array('name'=>'Kelvin', 'symbol'=>'K', 'pfactor'=>1, 'shift'=>0), array('name'=>'Celsius', 'symbol'=>'°C', 'pfactor'=>1, 'shift'=>-273.15), array('name'=>'Fahrenheit', 'symbol'=>'°F', 'pfactor'=>1.8, 'shift'=>-459.67), array('name'=>'Rankine', 'symbol'=>'°Ra', 'pfactor'=>1.8, 'shift'=>0), array('name'=>'Réaumur', 'symbol'=>'°Ré', 'pfactor'=>0.8, 'shift'=>-218.52), array('name'=>'Delisle', 'symbol'=>'°De', 'pfactor'=>-1.5, 'shift'=>559.725), array('name'=>'Rømer', 'symbol'=>'°Rø', 'pfactor'=>0.525, 'shift'=>-135.90375), array('name'=>'Newton', 'symbol'=>'°N', 'pfactor'=>0.33, 'shift'=>-90.1395)); function convertTemperature ($temperature, $from_scale, $to_scale) { if ($from_scale != $to_scale) { if ($from_scale) $temperature = convertTemperatureToKelvin($temperature, $from_scale); if ($to_scale) $temperature = convertTemperatureFromKelvin($temperature, $to_scale); } return $temperature; } function convertTemperatureToKelvin ($temperature, $scid) { global $scale; return ($temperature - $scale[$scid]['shift']) / $scale[$scid]['pfactor']; } function convertTemperatureFromKelvin ($temperature, $scid) { global $scale; return $temperature * $scale[$scid]['pfactor'] + $scale[$scid]['shift']; }

Erläuterungen

Von Vorteil für unsere Programmierung ist die Tatsache, dass alle Temperaturskalen, die heute oder früher von gewisser Relevanz waren, lineare Skalen sind. Zwar wurden auch alternative Vorschläge z.B. für logarithmische Skalen gemacht, welche gerade den absoluten Nullpunkt sinnvoll erfahrbar machen, doch konnten sich diese zu keiner Zeit durchsetzen.

Die Linearität führt dazu, dass jede Konvertierung zwischen zwei verschiedenen Skalen mit einer linearen Funktion beschrieben werden kann. Wir brauchen also jeweils nur einen Proportinalitätsfaktor, der die unterschiedlichen Gradabstände der Skalen angleicht, und einen Verschiebungswert, der die Fixpunkte der Skalen zur Deckung bringt. Die beiden Werte sind als pfactor resp. shift im obigen Array notiert.

Wie Sie sehen, gibt es zu jeder Temperaturskala nur eine Funktion, nämlich die Funktion, die eine Temperatur in Kelvin in die jeweilige Skala überführt. Die Rückrichtung lässt sich durch Bildung der Umkehrfunktion gewinnen; eine Konvertierung zwischen zwei beliebigen Skalen wird durch Umweg über die Kelvinskala ermöglicht. Dabei kann man sich entscheiden, ob man die beiden benötigten Funktionen zunächst miteinander vereinigt und dann die Konvertierung in einem Schritt vollführt oder die Konvertierung in zwei Schritten durchführt und den Wert in Kelvin zwischenspeichert. Bei dem hier vorgestellten Skript habe ich mich für letzteres entschieden, da es sich algorithmischer einfacher gestaltet und bei Umrechnung in mehrere Skalen das Zwischenergebnis wiederverwertet werden kann. Die erste Idee bietet sich inbesondere dann an, wenn man einen ganzen Haufen von Temperaturwerten der gleichen Konvertierung unterziehen will, weil die nötige Rechenzeit fast ausschließlich durch die Funktionsvereinigung verbraucht wird.

Nach diesen ganzen Vorüberlegungen gestaltet sich die Funktion ziemlich einfach. Zunächst wird verglichen, ob die beiden Skalen-Indizes ($from_scale, $to_scale) unterschiedlich sind; andernfalls müssten wir ja überhaupt keine Konvertierung vornehmen. Dann wird zunächst die Umkehrfunktion convertTemperatureToKelvin ausgeführt, anschließend die Ursprungsfunktion convertTemperatureFromKelvin.