Div(H)和Eval(H)给出不同的结果

时间:2015-06-17 20:30:53

标签: rpgle

我在两个不同的程序中使用来自相同文件的数据。我试图在我的新程序中使用Eval(H)而不是MULT和DIV(H)的两个操作获得相同的结果

以下是变量类型:

Var1,Var3,Var4,Var5 : 9P 2
Var2                : 9P 4

原始代码:

C     Var1           MULT      Var2           Var3
C     Var3           DIV(H)    Var4           Var5

在我的新计划中,我尝试了这个:

C                    Eval(H)   Var5 = (Var1 * Var2) / Var4

但是有一个.01的差异,即:在第一种方法Var5 = 4.20,其中在第二种方法Var5 = 4.19。

我知道如何只使用Eval(H)来纠正第二种方法吗?

2 个答案:

答案 0 :(得分:2)

如果没有实际值,它有点难以说明,但您可能会遇到RPG默认精度规则的问题,以及您从明确定义的中间体中移除的事实结果(即Var3)到一个隐含定义的结果。

使用隐式定义的中间结果,(Var 1 * Var2)的精度和比例将是18P6,而你定义的Var3为4P2。

"自然"精确度和规模整个陈述就像63P44(假设我的数学运算正确)。

尝试

eval(h) var5 = %dec((var1 * Var2):9:2) / var4;

将中间结果强制回到你使用MULT&amp ;;的9P2。 DIV

答案 1 :(得分:1)

使用DIV时,可以定义任何中间变量的长度(如VAR3)。当您使用EVAL时,编译器必须将这些中间值(例如VAR1 * VAR2)存储在某处,并在内部定义长度。 RPG Reference手册描述了编译器用于计算中间结果精度的规则。 IBM i 7.2>编程> ILE语言> RPG> ILE RPG参考>操作,表达和功能>表达式>数值运算的精确规则。