gpt4 book ai didi

delphi - Delphi 中超出数字类型限制的验证

转载 作者:行者123 更新时间:2023-12-01 23:28:01 27 4
gpt4 key购买 nike

有什么方法可以识别不可预测的值是否会超过数字类型的最大值?在以下代码中,if 子句的结果始终为 false,并且不会引发异常。

procedure TForm1.FormClick(Sender: TObject);
var
_Integer1, _Integer2: Integer;
begin
_Integer1 := MaxInt;

_Integer2 := _Integer1 + _Integer1;

if _Integer2 > MaxInt then
begin
Caption := '';
end
else
begin
Caption := IntToStr(_Integer2); // -2
end;
end;

最佳答案

您的 _Integer2 > MaxInt 永远不会返回 True,因为这是不可能的。 Integer 的值永远不能大于 Integer 的最大可能值。

但是,您可以启用 overflow checking :

var
x, y, z: Integer;
begin

{$Q+} // enable overflow checking

x := MaxInt div 2;
y := MaxInt div 4;

z := x + y; // fine

ShowMessage(z.ToString);

x := MaxInt div 2;
y := 3 * (MaxInt div 4);

try
z := x + y; // exception
ShowMessage(z.ToString); // won't run
except
on EIntOverflow do
ShowMessage('Integer overflow.');
end;

在这里,我使用编译器指令在本地启用溢出检查:{$Q+}。如果你想在特定函数或过程中使用溢出检查,你可以将它与重置器一起使用,如 this answer但相反。

您也可以使用 Project> Options> Delphi Compiler> Compiling 为整个项目启用它> 运行时错误> 溢出检查。请记住,此设置是每个配置(例如,调试与发布)。

关于delphi - Delphi 中超出数字类型限制的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66884706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com