我对cobol中的计算函数的舍入感到困惑.
宣言:
VAR-A PIC S9(9)V99 COMP-3.
VAR-B PIC S9(9)V9(6) COMP-3.
Run Code Online (Sandbox Code Playgroud)
程序.
MOVE +12.08 TO VAR-A.
MOVE +6.181657 TO VAR-B.
COMPUTE VAR-A ROUNDED = VAR-A + VAR-B.
Run Code Online (Sandbox Code Playgroud)
VAR-A的结果是18.27还是18.26?cobol会对计算做什么?它会将VAR-B首先舍入到VAR-A中指定的小数位,还是将cobol添加2个变量然后将它们四舍五入到VAR-A中指定的小数位?
任何帮助将不胜感激.
@NealB,
这个例子怎么样:
宣言:
01 VAR-ARRAY OCCURS 22 TIMES.
03 VAR-A PIC S9(9)V9(6) COMP-3.
01 VAR-B PIC S9(9)V99 COMP-3.
Run Code Online (Sandbox Code Playgroud)
假设VAR-A是一个数组,其值如下:
VAR-A(01) = 123.164612
VAR-A(02) = 12.07865
VAR-A(03) = 6.181657
VAR-A(04) = 1.744353
VAR-A(05) = 6.118182
VAR-A(06) = 1.744353
VAR-A(07) = 6.158715
VAR-A(08) = 1.744353
VAR-A(09) = 6.194759
VAR-A(10) = 1.744353
VAR-A(11) = 3.037896 …Run Code Online (Sandbox Code Playgroud) 我在VBA中有这个模糊的舍入问题.
a = 61048.4599674847
b = 154553063.208822
c = a + b
debug.print c
Result:
154614111.66879
Run Code Online (Sandbox Code Playgroud)
这是一个问题,为什么VBA取代了变量c?我没有发出任何舍入功能.我期待的价值是154614111.6687894847.即使我将变量c舍入或格式化为15位小数,我仍然没有达到预期的结果.
任何解释将不胜感激.
编辑:
使用cDec获得了预期的结果.我在Jonathan Allen的回复中已经读过这个为什么CLng会产生不同的结果?
以下是测试结果:
a = cDec(61048.4599674847)
b = cDec(154553063.208822)
c = a + b
?c
154614111.6687894847
Run Code Online (Sandbox Code Playgroud) 是否可以将一个十六进制字符串分配给comp或二进制声明的变量?
示例:01 COMP-VAR PIC 9(4)COMP.
将X'04D2'移至COMP-VAR.
应该输出+1234.
编辑:
对不起,我只是举了一个例子.真实情况是数据将来自外部源,即数据集.在将数据移动到comp声明变量之前,我需要将数据存储在字母数字变量中.我的问题是,当我将字母数字数据移动到comp变量时数据不正确.非常感激您的帮忙.