Delphi:不兼容的类型:当两个值都指定为实数时,“整数”和“扩展”

时间:2016-04-14 21:53:55

标签: delphi

我正在尝试编译一个相当基本的程序来计算BMI,但我似乎不断收到此错误,我不知道为什么或如何解决它。

这些是我的变数:

weight : real;
height : real;
bmi : real;

我的编码如下:

procedure TForm1.Button1Click(Sender: TObject);
begin
  weight := strtofloat(inputbox('weight', 'Enter your weight in        kilograms',''));
  height := strtofloat(inputbox('height', 'Enter your height in    centimeters',''));
  bmi := weight/sqr(height);
  EDIT1.Text := floattostr(BMI);
end;

如何解决此错误以及导致错误的原因?

1 个答案:

答案 0 :(得分:7)

Height被误认为是Self.Height,它引用了表单的高度属性,它是一个整数。为变量使用不同的名称,或使其在方法的范围内本地化。以下工作对我来说很好:

procedure TForm1.Button1Click(Sender: TObject);
var
  Weight, Height, BMI: Real;
  s: string;
begin
  s := InputBox('Weight', 'Enter your weight in kilos', '');
  Weight := StrToFloat(s);
  s := InputBox('Height', 'Enter your height in centimeters', '');
  Height := StrToFloat(s);
  BMI := Weight/sqr(Height);
  Edit1.Text := FloatToStr(BMI);
end;

我首选的解决方案是使用不同的名称,以避免将来出现任何混淆。我可能会做更像这样的事情:

procedure TForm1.Button1Click(Sender: TObject);
var
  BodyWeight, BodyHeight, BMI: Real;
  s: string;
begin
  s := InputBox('Weight', 'Enter your weight in kilos', '');
  BodyWeight := StrToFloat(s);
  s := InputBox('Height', 'Enter your height in centimeters', '');
  BodyHeight := StrToFloat(s);
  BMI := BodyWeight/sqr(BodyHeight);
  Edit1.Text := FloatToStr(BMI);
end;