Quellcode durchsuchen

* commit weird temperature scale conversion bug #39763

marcoonthegit vor 3 Jahren
Ursprung
Commit
3c4f1c454f
1 geänderte Dateien mit 60 neuen und 1 gelöschten Zeilen
  1. 60 1
      packages/rtl-objpas/src/inc/stdconvs.pp

+ 60 - 1
packages/rtl-objpas/src/inc/stdconvs.pp

@@ -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;