Div(H) 和 Eval(H) 给出不同的结果
Div(H) and Eval(H) gives different results
我在两个不同的程序中使用来自相同文件的数据。我试图在我的新程序中使用 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) 来更正第二种方法吗?
如果没有实际值,说明起来有点困难,但您可能 运行 遇到 RPG 默认精度规则的问题以及您已经从明确定义的中间结果(即 Var3 ) 到一个隐式定义的。
使用隐式定义的中间结果,(Var 1 * Var2)
的精度和小数位数将为 18P6,而 Var3 定义为 4P2。
整个语句的 "natural" 精度和比例类似于 63P44(假设我的数学计算正确)。
尝试
eval(h) var5 = %dec((var1 * Var2):9:2) / var4;
将中间结果强制返回到您使用 MULT & DIV
得到的 9P2
当您使用 DIV 时,您可以定义任何中间变量(如 VAR3)的长度。当您使用 EVAL 时,编译器必须将这些中间值(例如 VAR1 * VAR2)存储在某处,并在内部定义长度。 RPG Reference 手册描述了编译器用来计算中间结果精度的规则。 IBM i 7.2 > 编程 > ILE 语言 > RPG > ILE RPG 参考 > 运算、表达式和函数 > 表达式 > 数字运算的精度规则。
我在两个不同的程序中使用来自相同文件的数据。我试图在我的新程序中使用 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) 来更正第二种方法吗?
如果没有实际值,说明起来有点困难,但您可能 运行 遇到 RPG 默认精度规则的问题以及您已经从明确定义的中间结果(即 Var3 ) 到一个隐式定义的。
使用隐式定义的中间结果,(Var 1 * Var2)
的精度和小数位数将为 18P6,而 Var3 定义为 4P2。
整个语句的 "natural" 精度和比例类似于 63P44(假设我的数学计算正确)。
尝试
eval(h) var5 = %dec((var1 * Var2):9:2) / var4;
将中间结果强制返回到您使用 MULT & DIV
得到的 9P2当您使用 DIV 时,您可以定义任何中间变量(如 VAR3)的长度。当您使用 EVAL 时,编译器必须将这些中间值(例如 VAR1 * VAR2)存储在某处,并在内部定义长度。 RPG Reference 手册描述了编译器用来计算中间结果精度的规则。 IBM i 7.2 > 编程 > ILE 语言 > RPG > ILE RPG 参考 > 运算、表达式和函数 > 表达式 > 数字运算的精度规则。