diff --git a/API/Services/TemperatureService.cs b/API/Services/TemperatureService.cs index 00d36e4..8b15b5d 100644 --- a/API/Services/TemperatureService.cs +++ b/API/Services/TemperatureService.cs @@ -9,16 +9,24 @@ namespace API.Services { public class TemperatureService : BaseService { + // Base temperature scale is Celsius private static readonly Dictionary> _temperatureDirectConversions = new() { { "Celsius->Celsius", temperature => temperature }, { "Celsius->Fahrenheit", ToFahrenheit }, { "Celsius->Kelvin", ToKelvin }, + { "Celsius->Rankine", ToRankine }, { "Fahrenheit->Fahrenheit", temperature => temperature }, { "Fahrenheit->Celsius", FromFahrenheit }, { "Fahrenheit->Kelvin", temperature => ToKelvin(FromFahrenheit(temperature)) }, + { "Fahrenheit->Rankine", temperature => ToRankine(FromFahrenheit(temperature)) }, { "Kelvin->Celsius", FromKelvin }, { "Kelvin->Fahrenheit", temperature => ToFahrenheit(FromKelvin(temperature)) }, - { "Kelvin->Kelvin", temperature => temperature } }; + { "Kelvin->Kelvin", temperature => temperature }, + { "Kelvin->Rankine", temperature => ToRankine(FromKelvin(temperature)) }, + { "Rankine->Rankine", temperature => temperature }, + { "Rankine->Celsius", FromRankine }, + { "Rankine->Fahrenheit", temperature => ToFahrenheit(FromRankine(temperature)) }, + { "Rankine->Kelvin", temperature => ToKelvin(FromRankine(temperature)) } }; private static readonly List _fromTo = _temperatureDirectConversions.Select(tdc => tdc.Key.Split("->").First()).Distinct().ToList(); @@ -59,6 +67,8 @@ private static Func FindDirectConversion(TemperatureRequest requ } private static double ToKelvin(double temperature) => temperature + 273.15; + private static double ToRankine(double temperature) => temperature * 1.8 + 491.67; + private static double FromRankine(double temperature) => (temperature - 491.67) * 0.555555556; private static double FromKelvin(double temperature) => temperature - 273.15; private static double ToFahrenheit(double temperature) => temperature * 1.8 + 32.0; private static double FromFahrenheit(double temperature) => (temperature - 32.0) * 0.555555556;