* commit weird temperature scale conversion bug #39763

(cherry picked from commit 3c4f1c454f)
This commit is contained in:
marcoonthegit 2022-06-06 17:20:51 +02:00
parent 0f862dd132
commit bfd7cf82b0

View File

@ -140,6 +140,10 @@ var
tuFahrenheit,
tuRankine,
tuReamur,
tuDelisle,
tuNewton,
tuRomer,
tuReguloGasMark,
{
cbTime family
@ -229,7 +233,14 @@ function CelsiusToKelvin (const AValue: Double): Double;
function KelvinToCelsius (const AValue: Double): Double;
function RankineToCelsius (const AValue: Double): Double;
function CelsiusToRankine (const AValue: Double): Double;
function DelisleToCelsius (const AValue: Double): Double;
function CelsiusToDelisle (const AValue: Double): Double;
function NewtonToCelsius (const AValue: Double): Double;
function CelsiusToNewton (const AValue: Double): Double;
function RomerToCelsius (const AValue: Double): Double;
function CelsiusToRomer (const AValue: Double): Double;
function ReguloGasMarkToCelsius(const AValue: Double): Double;
function CelsiusToReguloGasMark(const AValue: Double): Double;
implementation
@ -263,6 +274,46 @@ begin
result:=(AValue+273.15)*1.8;
end;
function DelisleToCelsius(const AValue: Double): Double;
begin
result:=100-(Double(2/3)*AValue);
end;
function CelsiusToDelisle(const AValue: Double): Double;
begin
result:=1.5*(100-AValue);
end;
function NewtonToCelsius(const AValue: Double): Double;
begin
result:=Double(100/33)*AValue;
end;
function CelsiusToNewton(const AValue: Double): Double;
begin
result:=0.33*AValue;
end;
function RomerToCelsius(const AValue: Double): Double;
begin
result:=(AValue-7.5)*Double(40/21);
end;
function CelsiusToRomer(const AValue: Double): Double;
begin
result:=AValue*Double(21/40) + 7.5;
end;
function ReguloGasMarkToCelsius(const AValue: Double): Double;
begin
result:=AVAlue*Double(125/9) + 121.11;
end;
function CelsiusToReguloGasMark(const AValue: Double): Double;
begin
result:=Double(9/125)*(AValue-121.11);
end;
ResourceString // Note, designations for FFU's are guesses.
@ -335,6 +386,10 @@ ResourceString // Note, designations for FFU's are guesses.
txttuFahrenheit = 'degrees Fahrenheit (degF)';
txttuRankine = 'degrees Rankine (degR)';
txttuReamur = 'degrees Reamur (degReam)';
txttuDelisle = 'degrees Delisle(degDe)';
txttuNewton = 'degrees Newton (degN)';
txttuRomer = 'degrees Romer (degRo)';
txttuReguloGasMark = 'degrees ReguloGasMark (degRM)';
txttuMilliSeconds = 'milli seconds (ms)';
txttuSeconds = 'seconds (s)';
txttuMinutes = 'minutes (min)';
@ -492,6 +547,10 @@ begin
tuFahrenheit := RegisterConversionType(cbTemperature,txttuFahrenheit,@FahrenheitToCelsius,@CelsiusToFahrenheit);
tuRankine := RegisterConversionType(cbTemperature,txttuRankine,@RankineToCelsius,@CelsiusToRankine);
tuReamur := RegisterConversionType(cbTemperature,txttuReamur,10/8); // Reaumur?
tuDelisle := RegisterConversionType(cbTemperature,txttuDelisle,@DelisleToCelsius,@CelsiusToDelisle);
tuNewton := RegisterConversionType(cbTemperature,txttuNewton,100/33);
tuRomer := RegisterConversionType(cbTemperature,txttuRomer,@RomerToCelsius,@CelsiusToRomer);
tuReguloGasMark := RegisterConversionType(cbTemperature,txttuReguloGasMark,@ReguloGasMarkToCelsius,@CelsiusToReguloGasMark);
end;
Const Yearsec=365.24219879*24*3600.0; // year in seconds;