mirror of
https://github.com/chylex/Query.git
synced 2025-05-02 20:34:09 +02:00
103 lines
3.3 KiB
C#
103 lines
3.3 KiB
C#
using System.Globalization;
|
|
using System.Text.RegularExpressions;
|
|
using AppConv.General;
|
|
using Base.Utils;
|
|
|
|
namespace AppConv.Units{
|
|
internal class Temperature : DecimalUnitConverterBase<Temperature.Units>{
|
|
internal enum Units{
|
|
Invalid = 0, Celsius, Kelvin, Fahrenheit, Rankine, Delisle, Newton, Reaumur, Romer
|
|
}
|
|
|
|
private static readonly NameMap UnitNames = new NameMap(21){
|
|
{ "C", Units.Celsius },
|
|
{ "Celsius", Units.Celsius },
|
|
{ "K", Units.Kelvin },
|
|
{ "Kelvin", Units.Kelvin },
|
|
{ "F", Units.Fahrenheit },
|
|
{ "Fahrenheit", Units.Fahrenheit },
|
|
{ "R", Units.Rankine },
|
|
{ "Ra", Units.Rankine },
|
|
{ "Rankine", Units.Rankine },
|
|
{ "De", Units.Delisle },
|
|
{ "Delisle", Units.Delisle },
|
|
{ "N", Units.Newton },
|
|
{ "Newton", Units.Newton },
|
|
{ "Re", Units.Reaumur },
|
|
{ "Ré", Units.Reaumur },
|
|
{ "Reaumur", Units.Reaumur },
|
|
{ "Réaumur", Units.Reaumur },
|
|
{ "Ro", Units.Romer },
|
|
{ "Rø", Units.Romer },
|
|
{ "Romer", Units.Romer },
|
|
{ "Rømer", Units.Romer }
|
|
};
|
|
|
|
private static readonly DecimalFuncMap FromCelsius = new DecimalFuncMap(8){
|
|
{ Units.Celsius, val => val },
|
|
{ Units.Kelvin, val => val+273.15M },
|
|
{ Units.Fahrenheit, val => val*1.8M+32M },
|
|
{ Units.Rankine, val => (val+273.15M)*1.8M },
|
|
{ Units.Delisle, val => (100M-val)*1.5M },
|
|
{ Units.Newton, val => val*0.33M },
|
|
{ Units.Reaumur, val => val*0.8M },
|
|
{ Units.Romer, val => val*0.525M+7.5M }
|
|
};
|
|
|
|
private static readonly DecimalFuncMap ToCelsius = new DecimalFuncMap(8){
|
|
{ Units.Celsius, val => val },
|
|
{ Units.Kelvin, val => val-273.15M },
|
|
{ Units.Fahrenheit, val => (val-32M)*5M/9M },
|
|
{ Units.Rankine, val => (val-491.67M)*5M/9M },
|
|
{ Units.Delisle, val => 100M-val*2M/3M },
|
|
{ Units.Newton, val => val*100M/33M },
|
|
{ Units.Reaumur, val => val*1.25M },
|
|
{ Units.Romer, val => (val-7.5M)*40M/21M }
|
|
};
|
|
|
|
private static readonly Regex RegexCleanup = new Regex("deg(?:rees?)?|°", RegexUtils.Text);
|
|
|
|
protected override NameMap Names{
|
|
get{
|
|
return UnitNames;
|
|
}
|
|
}
|
|
|
|
protected override DecimalFuncMap ConvertFrom{
|
|
get{
|
|
return FromCelsius;
|
|
}
|
|
}
|
|
|
|
protected override DecimalFuncMap ConvertTo{
|
|
get{
|
|
return ToCelsius;
|
|
}
|
|
}
|
|
|
|
protected override int Precision{
|
|
get{
|
|
return 2;
|
|
}
|
|
}
|
|
|
|
protected override NumberStyles NumberStyle{
|
|
get{
|
|
return NumberStyles.Float;
|
|
}
|
|
}
|
|
|
|
protected override string ProcessSrc(string src){
|
|
return RegexCleanup.Replace(src, "");
|
|
}
|
|
|
|
protected override string ProcessDst(string dst){
|
|
return RegexCleanup.Replace(dst, "");
|
|
}
|
|
|
|
protected override bool IsValueInvalid(Units value){
|
|
return value == Units.Invalid;
|
|
}
|
|
}
|
|
}
|