1

我正在学习德尔福,出于某种原因,他们使用这种旧语言,但无论如何。我需要构建一个转换摄氏度和华氏度的天气应用程序。

用户必须输入 7 天天气,但这个例子我只想弄清楚第 1 天

所以我首先创建了单选按钮来选择摄氏度和华氏度,然后如果他们选择摄氏度,我必须将摄氏度转换为华氏度,如果他们选择华氏度,我必须将其转换为摄氏度。

所以这是我的代码:

 var
   Celsius, Fahrenheit, Day1 : Double;

 begin
   Day1 := fedDay1;
   Celsius := (Day1 - 32)*5/9;
   Fahrenheit := Day1 * 9/5 + 32;

   if radCelsius.checked then
     lblConvertDay1.Caption := FloatToStrF(Fahrenheit, ffFixed, 15, 2);
   else
     lblConvertDay1.Caption := FloatToStr(Celsius, ffFixed, 15, 2);
   end;

它在 fedDay1 上给出错误 这是一个浮动旋转编辑

请帮忙

4

4 回答 4

5

您不能将 SpinEdit 直接分配给变量。您必须使用该值。

Day1 := fedDay1.Value;

您的代码必须只进行所需的转换,因为Day1已经有其中一个。因此,如果用户输入了摄氏值,您只需将摄氏转换为华氏即可。如果他们输入了华氏值,您只需将华氏转换为摄氏度。

var
  Day1: Double;
  OutVal: Double;
begin
  Day1 := fedDay1.Value;
  if radCelsius.checked then
    OutVal := (9.0 / 5.0) * Day1 + 32     // Cels. entered; convert to Fahrenheit 
  else
    OutVal := (5.0 / 9.0) * (Day1 - 32);  // Fahr. entered; convert to Celsius
  lblConvertDay1.Caption := FloatToStr(OutVal, ffFixed, 15, 2);
end;

如果您使用的是最新版本的 Delphi(Delphi 2007 有它们,它们可能可以追溯到 Delphi 5),该StdConvs单元具有可用于转换的预定义函数:

implementation

uses
  StdConvs;

   if ...
      OutVal := CelsiusToFahrenheit(Day1)
   else
      OutVal := FahrenheitToCelsius(Day1);
于 2013-09-06T14:46:40.237 回答
3

解决问题的正确方法是创建一个函数来从摄氏温度转换为华氏温度,然后再创建一个反方向转换的函数。

function CelsiusFromFahrenheit(const Fahrenheit: Double): Double;
begin
  Result := (Fahrenheit-32.0)/1.8;
end;

function FahrenheitFromCelsius(const Celsius: Double): Double;
begin
  Result := Celsius*1.8 + 32.0;
end;

代码中的主要错误fedDay1不是浮点值,而是 GUI 控件。所以你需要用fedDay1.Value.

然后你可以更干净地编写你的 GUI 更新代码:

InputValue := fedDay1.Value;
if radCelsius.checked then
  ConvertedValue := FahrenheitFromCelsius(InputValue)
else
  ConvertedValue := CelsiusFromFahrenheit(InputValue);
lblConvertDay1.Caption := FloatToStrF(ConvertedValue, ffFixed, 15, 2);
于 2013-09-06T14:51:34.650 回答
2

您不能将微调器分配给双重。你需要从中获得价值。

尝试:

Day1 := fedDay1.Value;
于 2013-09-06T14:38:08.377 回答
1

你有功能CelsiusToFahrenheit。您的代码需要进行一些修改才能拥有功能性应用程序。

于 2013-09-06T14:46:33.987 回答