Cobol 计算:发生低阶截断时发出警告

Cobol 计算:发生低阶截断时发出警告,cobol,Cobol,我有一个结果字段指定为 01 MY-RESULT VALUE +0 USAGE COMP-3 PIC S9(13)V99 假设我乘以两个因子: COMPUTE MY-RESULT = A * B 在MY-RESULT中检测低阶截断的最佳方法是什么? 例如,当A=B=2.01时 未触发大小错误上的子句 适用于所有供应商,甚至是最老的编译器(因为您没有指定任何方言,这似乎是最重要的部分):如果有问题,请使用具有更多小数点位置的附加目标字段,然后检查是否相等: COMPUTE MY-RESULT

我有一个结果字段指定为

01 MY-RESULT VALUE +0 USAGE COMP-3 PIC S9(13)V99
假设我乘以两个因子:

COMPUTE MY-RESULT = A * B
MY-RESULT
中检测低阶截断的最佳方法是什么? 例如,当
A=B=2.01


未触发大小错误上的
子句

适用于所有供应商,甚至是最老的编译器(因为您没有指定任何方言,这似乎是最重要的部分):如果有问题,请使用具有更多小数点位置的附加目标字段,然后检查是否相等:

COMPUTE MY-RESULT RESULT-WITH-MORE-DECIMALS = A * B
IF MY-RESULT NOT = RESULT-WITH-MORE DECIMALS
   ...
END-IF
关于大小错误
将仅针对上截断进行跟踪


如果此2014功能操作系统可用于您的编译器,您可以使用禁止中间舍入的
(草稿将其设置为禁止舍入模式
这将向您显示此问题(如果启用了
EC-SIZE-TRUNCATION
异常)。注意一个部分:这是一个“致命”类别的例外…

低阶截断是标准的一部分。四舍五入可以稍微修改这一点(按照1985年的标准,一个“额外”的小数点位置中的五个或五个以上会导致将结果中定义的最低位置的一个单位添加到结果中)。为什么你需要知道,我从来都不需要知道。如果已知乘法不会导致低阶截断(被乘数在小数点处为零,或者两者在低阶小数点处均为零),我可能只会执行乘法运算。
COMPUTE MY-RESULT-WITH-MORE-DECIMALS=A*B如果MY-RESULT不等于RESULT-WITH-MORE-DECIMALS。。。END-IF
@BillWoodger-我添加了实际代码,并将其从显式的
移动
更改为您建议的“使用两个目标字段”-使用两个目标字段保存一个
移动
lineNice idea!我不知道这是可能的。多谢各位@KlausSchulz COBOL中的所有算术运算都在一个中间字段上进行,结果总是被复制(几乎与
MOVE
相同),并且像
on SIZE ERROR
这样的子句会在之后进行求值-因此您可以始终使用多个目标。