我在两个不同的程序中使用来自相同文件的数据。我试图在我的新程序中使用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)来纠正第二种方法吗?
答案 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参考>操作,表达和功能>表达式>数值运算的精确规则。