在FreePascal中捕获整数溢出异常

时间:2016-01-07 02:41:11

标签: exception-handling pascal freepascal integer-overflow

我正在尝试这个简单的程序来捕获异常。

成功捕获除零异常。但是,我似乎无法捕获整数溢出

据我所知, SmallInt 类型整数会在+32767之后溢出,因为最大有符号值= 2 ^ 15 - 1(即+32767)。

以下是代码:

Program ss;

Var

  Price, Qty: SmallInt;
  Rate: Real;

Begin
  Try

    write('Enter Total price '); Readln(Price);
    Write('Enter qty '); Readln(Qty);

    Rate := Price / Qty;
    Writeln('Single item = ', Rate:0:2);

  except
    On EDivByZero Do Writeln('qty must be a valid num above 0');
    On EIntOverflow Do Writeln('too large')
  end;
End.

但是,似乎溢出异常被捕获。相反,溢出值被视为负数,代码继续,好像什么都没有错。

这是输出:

  

输入总价32768

     

输入数量1

     

单项= -32768.00

     

按任意键返回IDE

我在代码中做错了吗?在FreePascal中捕获整数溢出的正确方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

您必须包含单元sysutils,因为它包含将最深层运行时错误更改为可捕获语言异常的代码