You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lazarus程序出现"" is an invalid integer错误,求有效修复方法

问题解决:Lazarus Pascal中"" is an invalid integer错误

错误原因

  • 当Edit2或Edit3为空(即Edit2.Text = ''或Edit3.Text = '')时,StrToInt无法将空字符串转换为整数,直接抛出转换错误。
  • 你提到将StrToInt替换为FloatToString是完全错误的操作:FloatToString的作用是把浮点数转为字符串,和「字符串转整数」的需求完全不匹配,自然无法解决问题。

修复方案

方案1:用StrToIntDef处理空值/无效输入

StrToIntDef支持设置默认值,当输入为空或不是有效整数时,自动返回你指定的默认值(比如0),避免报错。修改后的Button1Click代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var conf, adult: Integer;
   pr:real;
begin
    // 空值或无效输入时默认取0
    adult := StrToIntDef(Edit2.Text, 0);
    conf := StrToIntDef(Edit3.Text, 0);
    // 同样用StrToFloatDef处理Edit4的空值问题
    pr := StrToFloatDef(Edit4.Text, 0.0);
    
    If Peak1.Checked then
      pr := (adult * 8.95) + (conf * 6.45)
    else
      pr := (adult * 7.45) + (conf * 5.95);

    Edit4.Text := '£' + FloatToStr(pr);
end;

方案2:先校验输入再转换

如果需要强制用户输入有效内容(而非用默认值),可以先判断输入是否为空,再做转换:

procedure TForm1.Button1Click(Sender: TObject);
var conf, adult: Integer;
   pr:real;
begin
    // 检查Edit2输入
    if Trim(Edit2.Text) = '' then
    begin
      ShowMessage('请输入成人数量');
      Edit2.SetFocus;
      Exit;
    end;
    // 检查Edit3输入
    if Trim(Edit3.Text) = '' then
    begin
      ShowMessage('请输入儿童数量');
      Edit3.SetFocus;
      Exit;
    end;

    try
      adult := StrToInt(Edit2.Text);
      conf := StrToInt(Edit3.Text);
      pr := StrToFloatDef(Edit4.Text, 0.0);
    except
      on E: EConvertError do
      begin
        ShowMessage('请输入有效的数字');
        Exit;
      end;
    end;

    If Peak1.Checked then
      pr := (adult * 8.95) + (conf * 6.45)
    else
      pr := (adult * 7.45) + (conf * 5.95);

    Edit4.Text := '£' + FloatToStr(pr);
end;

额外优化

观察代码逻辑,Edit4是用来显示计算结果的,初始读取它的内容没有实际意义,可以直接将pr初始化为0,彻底避免Edit4为空时的转换问题:

pr := 0.0; // 直接初始化,无需读取Edit4的内容

内容的提问来源于stack exchange,提问作者123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:25:46