我正在尝试编译一个相当基本的程序来计算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;
如何解决此错误以及导致错误的原因?
答案 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;