我正在学习德尔福,由于某些原因,他们使用这种旧语言,但无论如何。 我需要构建一个转换Celsius和Fahrenheit的Weather应用程序。
用户必须输入7天天气但这个例子我只想弄清第1天
所以我首先创建了选择Celsius和Fahrenheit的单选按钮, 然后,如果他们选择Celsius我必须将Celsius转换为Fahrenheit,如果他们选择Fahrenheit,我必须将其转换为Celsius。
所以这是我的代码:
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上出现错误这是一个浮动旋转编辑
请帮助
答案 0 :(得分: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);
答案 1 :(得分: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);
答案 2 :(得分:2)
您无法将微调器指定给double。你需要从中获取价值。
尝试:
Day1 := fedDay1.Value;
答案 3 :(得分:1)
你有CelsiusToFahrenheit功能。您的代码需要进行一些修改才能拥有实用的应用程序。