Delphi中的EInvalidOp异常

Delphi中的EInvalidOp异常,delphi,exception,Delphi,Exception,my Delphi应用程序在用户PC上引发EInvalidOp异常:浮点操作无效 在这里: var progress100 :extended; taille_cur : int64; i : Integer; begin ... progress100 := min(taille_cur div 2 * 100 / i, 99) // **raises the exception** .... end; 我不知道为什么。 当progress100是一个整数时,它工作得很好。我把它改

my Delphi应用程序在用户PC上引发EInvalidOp异常:浮点操作无效

在这里:

var
progress100 :extended;
taille_cur : int64;
i : Integer;

begin

...

progress100 := min(taille_cur div 2 * 100 / i, 99) // **raises the exception**


....
end;
我不知道为什么。 当progress100是一个整数时,它工作得很好。我把它改成了Extended。 或者变量i是零


请提供帮助。

我能看到发生该错误的唯一方法是I等于0


如果代码在调试器下运行,这类问题通常更容易解决。您只需检查表达式参数的值,就可以清楚地了解故障发生的原因。

好的,您正在运行代码。变量有哪些值?你没能告诉我们那个信息。请提供一个完整的程序。我也不知道为什么,但如果我是你,我会先添加几个明确的括号。你是唯一可以调试这个问题的人。单击以progess100:=开头的行并按F5,然后按F9运行程序。当该行的断点被命中并且程序停止时,按该顺序查看i和taille_cur的内容,您将确切地看到是什么导致了问题。我投票决定关闭这个网站,因为它太本地化了,因为我们在运行诊断时看不到变量的值。也有可能Min实际上不是数学。Min.@DavidHeffernan:如果人们只检查他们的先决条件非零分母,而不是进行无意义的调用,然后希望出现错误以便处理它们-但这不会引发一个除法为0的异常,而不是一个无效的浮点运算异常吗?@Mason不,不会吗?我刚刚对它进行了测试,结果是:Project1.exe引发了一个异常类EZeroDivide,消息是“浮点除零”。那么,在什么情况下,Delphi程序中被零除会提高EInvalidOp而不是EZeroDivide?@Mason当我运行代码时,引发了无效op。XE3,香草控制台应用程序,所有变量都等于0。啊哈!0/0将引发EInvalidOp。但是,任何超过0的值都会增加EZeroDivide。