这个程序编译成功:
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure Foo;
var
Text: string;
rNum: Double;
begin
rNum := StrToFloat(Text);
Text := IntToStr(round(rNum));
Text := FloatToStrF(sqr(rNum), ffFixed, 8, 3);
Text := FloatToStrF(sqrt(rNum), ffFixed, 8, 3);
Text := FloatToStr(Frac(rNum));
Text := IntToStr(trunc(rNum));
Text := FloatToStr(Frac(rNum));
end;
begin
end.
我为了做一个简单的程序改变了你的代码,可以轻松发布。
这表明你的问题不在于你展示的代码。问题在别的地方。弄清楚具体的问题不应该成为你学习的主要教训。主要的教训应该是如何简化问题并进行明确的诊断。
你应该做的是从你当前的代码开始,并开始剥离出来。当你去除对行为有影响的东西时,你已经学到了一些东西。把这个东西放回去,找出为什么删除它改变了行为。那时你应该有一个解释。
现在考虑这个方案:
{$APPTYPE CONSOLE}
uses
SysUtils;
const
Frac: Double = 0.0;
procedure Foo;
var
Text: string;
rNum: Double;
begin
rNum := StrToFloat(Text);
Text := IntToStr(round(rNum));
Text := FloatToStrF(sqr(rNum), ffFixed, 8, 3);
Text := FloatToStrF(sqrt(rNum), ffFixed, 8, 3);
Text := FloatToStr(Frac(rNum));
Text := IntToStr(trunc(rNum));
Text := FloatToStr(Frac(rNum));
end;
begin
end.
它无法编译上指Frac
和编译器会报告该错误的行:
[dcc32 Error]: E2066 Missing operator or semicolon
所以,你可能有类似的问题。您将定义一个额外的符号来隐藏您想要引用的符号。
您的代码段中没有语法错误。 – 2014-11-23 15:20:39
检查这三条线之前的线。如果之前的行缺少一个';',那么它不能在该行上被检测到,因为'''* * *本身可以放在一个新行上。只有当编译器看到'edtFrac'时,它才能说出真的没有';'。 – hvd 2014-11-23 15:23:28
这3行中的每一行都给了我这个错误。如果我注释掉这一行,它会给我下一行的错误。如果我将这三行中的任意一行移到我的代码的顶部,我仍然会遇到这个问题。我将完整的代码添加到原始帖子中。 – user3616928 2014-11-23 15:37:05