【问题标题】:Invalid Floating point operation Pascal无效的浮点运算 Pascal
【发布时间】:2016-03-11 16:54:31
【问题描述】:

我在 fastreport 中使用 Pascal 编写程序,当我尝试显示除法结果时出现问题。这是我的程序:

var
relec_tp_for_pa, tp_for_pa, relec_tt_tp, total_tp, coef_relec : Real = 0;
relec_vt : Integer = 0;

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);               
begin

if ( ( <EJobsQuery."SERV_ID"> = 54 ) )  then        
   begin
       relec_tp_for_pa := tp_for_pa;                                      
       relec_vt := relec_vt + <EJobsQuery."EJOB_VOLUME">;                                      
       relec_tt_tp := relec_tt_tp + tp;
       total_tp := total_tp + tp;
   end;

coef_relec := StrToFloat(FormatFloat('0.0000', relec_tt_tp / total_tp));

relec_pa.Text := FormatFloat('0.00', relec_vt /(relec_tp_for_pa * coef_relec));                
relec_pr.Text := FloatToStr( relec_vt / relec_tt_tp );                 

end;

这两个部门:
-relec_vt /(relec_tp_for_pa * coef_relec)
-relec_vt / relec_tt_tp
给我错误:无效的浮点运算

我正在 FastReport 4.11.4 中编写一份报告。 如果这可以提供帮助,请在 32 位操作系统下使用。

再次感谢。

【问题讨论】:

  • 您的变量未初始化。你能指望什么?不要那样做。
  • @gnasher729 在我的程序中,所有变量都已初始化,所以这不是问题,谢谢
  • 好的 @RyanVincent 我会试试这个解决方案
  • 这不是你的程序。请出示真实代码。如果您发布一些虚假代码,我们如何才能看到问题所在?

标签: pascal freepascal pascalscript fastreport


【解决方案1】:

从您的编码看来,您除以零!

-relec_vt /(relec_tp_for_pa * coef_relec)

-relec_vt / relec_tt_tp

自从

relec_tp_for_pa := tp_for_pa

绝对是零!

relec_tp_for_pa * coef_relec 

也会为零!

对于relec_tt_tp,我只能尝试猜测,因为这段代码不是一个完整的例子。

total_tp := total_tp + tp

total_tp 为零,如果 tp 也为零,你最终会被零除。

通常我会检查你的除数是否不为零!

【讨论】:

  • 感谢@Alexander 的回复。我认为这不是问题,因为我通过单独显示这些变量来检查它们的内容。
  • 这是您发布的代码。在这段代码中,relec_tp_for_pa 绝对为零!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
相关资源
最近更新 更多