Delphi:“不兼容的类型整数和扩展”

时间:2017-03-13 17:59:45

标签: delphi integer delphi-7 pascal incompatibletypeerror

我目前面临的问题是无法将ClientWidth除以2(或者因为Delphi给我的错误消息而乘以0.5:

[Error] Unit1.pas(59): Incompatible types: 'Integer' and 'Extended'
[Error] Unit1.pas(60): Incompatible types: 'Integer' and 'Extended'
[Error] Unit1.pas(61): Incompatible types: 'Integer' and 'Extended'

procedure TForm1.FormResize(Sender: TObject);
begin
 // responsive design
 with form1 do begin
 cmdFakultat.left:=0.5*ClientWidth-60;
 txtEingabe.left:=0.5*ClientWidth-60;
 lblAusgabe.left:=0.5*ClientWidth-60;
 end;
end;

end.

2 个答案:

答案 0 :(得分:8)

使用TruncRound功能,具体取决于您所需的行为,例如......

lblAusgabe.left := Trunc(0.5 * ClientWidth) - 60;

lblAusgabe.left := Round(0.5 * ClientWidth) - 60;

这会在小数点后删除所有内容,因此只留下Integer类型。

作为替代方案,您也可以使用div来完成此操作,这有点直接,并为您进行此转换...

lblAusgabe.left := (ClientWidth div 2) - 60;

答案 1 :(得分:0)

整数只能包含整数(假设lblAusgabe.left是一个整数)。您尝试分配给它的值有一个小数点。小数点数可以存储在Pascal中的实数,双数或扩展值中。要将分数转换为整数,可以使用round()函数对其进行舍入,也可以使用trunc()函数丢弃小数点后的部分。

另一种解决方案是使用整数计算所需的值。例如:

  

cmdFakultat.left:= ClientWidth div 2-60;

Div除以整数并返回一个整数值,丢弃小数点后面的任何内容。