我有一个指定为
的结果字段01 MY-RESULT VALUE +0 USAGE COMP-3 PIC S9(13)V99
想象一下,我将两个因素相乘:
COMPUTE MY-RESULT = A * B
在MY-RESULT
中检测低阶截断的最佳方法是什么?
例如。何时A=B=2.01
。
未触发ON SIZE ERROR
子句。
答案 0 :(得分:3)
可以与所有供应商甚至是最老的编译器一起使用的东西(因为你没有指定任何方言似乎是最重要的部分):如果重要的是使用具有更多小数位的额外目标字段并在之后检查相等性:
COMPUTE MY-RESULT RESULT-WITH-MORE-DECIMALS = A * B
IF MY-RESULT NOT = RESULT-WITH-MORE DECIMALS
...
END-IF
ON SIZE ERROR
将仅跟踪上部截断。
如果您的编译器可以使用此2014功能操作系统,则可以使用INTERMEDIATE ROUNDING IS PROHIBITED
(草稿将其作为ROUNDED-MODE PROHIBITED
),这将显示此问题(如果启用了EC-SIZE-TRUNCATION
异常)。谨防一个部分:这是一个例外,其中有一个致命的"种类...