计算 cobol 中的四舍五入

2024-02-22

我对 cobol 中计算函数的舍入感到困惑。

宣言:

VAR-A      PIC  S9(9)V99 COMP-3.
VAR-B      PIC  S9(9)V9(6) COMP-3.

程序。

MOVE +12.08 TO VAR-A.
MOVE +6.181657 TO VAR-B.


COMPUTE VAR-A ROUNDED = VAR-A + VAR-B.

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.

假设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
VAR-A(12) =  1.743852
VAR-A(13) =  6.14653
VAR-A(14) =  1.744353
VAR-A(15) =  0.000377
VAR-A(16) =  1.743852
VAR-A(17) =  6.144363
VAR-A(18) =  1.743852
VAR-A(19) =  0.007649
VAR-A(20) =  1.744353
VAR-A(21) =  0.000377
VAR-A(22) =  1.744353

VAR-B的值为:

VAR-B = 405.25

程序:

PERFORM VAR-IDX FROM 1 BY 1 UNTIL VAR-IDX > 22
  COMPUTE VAR-B ROUNDED = VAR-B + VAR-A(VAR-IDX)
END-PERFORM.

为什么计算后 VAR-B 的结果是 597.87?


我相信默认的 COBOL 舍入行为是:最接近零。

COMPUTE VAR-A ROUNDED = VAR-A + VAR-B

应该导致VAR-A含18.26

舍入发生在表达式求值之后。一个更有趣的例子可能是:

01  VAR-A      PIC  S9(9)V99 COMP-3.               
01  VAR-B      PIC  S9(9)V9(6) COMP-3.             
01  VAR-C      PIC  S9(9)V9(6) COMP-3.             

 MOVE +12.08 TO VAR-A.                         
 MOVE +06.182000 TO VAR-B.                     
 MOVE +00.004000 TO VAR-C.                     
 COMPUTE VAR-A ROUNDED = VAR-A + VAR-B + VAR-C.

结果是18.27。四舍五入VAR-B and VAR-C在进行加法之前保留两位小数将得到 18.26,因为 VAR-B 舍入为 6.18,VAR-C 舍入为 0.00。结果实际上是 18.27,因此舍入发生在表达式求值之后。

回复已编辑的问题

输出不太漂亮,但这就是我使用 IBM Enterprise COBOL for z/OS 进行计算的方式



VAR-IDX = 01 VAR-B = +405.25 VAR-A = +123.164612 VAR-B + VAR-A = +528.41
VAR-IDX = 02 VAR-B = +528.41 VAR-A = +012.078650 VAR-B + VAR-A = +540.49
VAR-IDX = 03 VAR-B = +540.49 VAR-A = +006.181657 VAR-B + VAR-A = +546.67
VAR-IDX = 04 VAR-B = +546.67 VAR-A = +001.744353 VAR-B + VAR-A = +548.41
VAR-IDX = 05 VAR-B = +548.41 VAR-A = +006.118182 VAR-B + VAR-A = +554.53
VAR-IDX = 06 VAR-B = +554.53 VAR-A = +001.744353 VAR-B + VAR-A = +556.27
VAR-IDX = 07 VAR-B = +556.27 VAR-A = +006.158715 VAR-B + VAR-A = +562.43
VAR-IDX = 08 VAR-B = +562.43 VAR-A = +001.744353 VAR-B + VAR-A = +564.17
VAR-IDX = 09 VAR-B = +564.17 VAR-A = +006.194759 VAR-B + VAR-A = +570.36
VAR-IDX = 10 VAR-B = +570.36 VAR-A = +001.744353 VAR-B + VAR-A = +572.10
VAR-IDX = 11 VAR-B = +572.10 VAR-A = +003.037896 VAR-B + VAR-A = +575.14
VAR-IDX = 12 VAR-B = +575.14 VAR-A = +001.743852 VAR-B + VAR-A = +576.88
VAR-IDX = 13 VAR-B = +576.88 VAR-A = +006.146530 VAR-B + VAR-A = +583.03
VAR-IDX = 14 VAR-B = +583.03 VAR-A = +001.744353 VAR-B + VAR-A = +584.77
VAR-IDX = 15 VAR-B = +584.77 VAR-A = +000.000377 VAR-B + VAR-A = +584.77
VAR-IDX = 16 VAR-B = +584.77 VAR-A = +001.743852 VAR-B + VAR-A = +586.51
VAR-IDX = 17 VAR-B = +586.51 VAR-A = +006.144363 VAR-B + VAR-A = +592.65
VAR-IDX = 18 VAR-B = +592.65 VAR-A = +001.743852 VAR-B + VAR-A = +594.39
VAR-IDX = 19 VAR-B = +594.39 VAR-A = +000.007649 VAR-B + VAR-A = +594.40
VAR-IDX = 20 VAR-B = +594.40 VAR-A = +001.744353 VAR-B + VAR-A = +596.14
VAR-IDX = 21 VAR-B = +596.14 VAR-A = +000.000377 VAR-B + VAR-A = +596.14
VAR-IDX = 22 VAR-B = +596.14 VAR-A = +001.744353 VAR-B + VAR-A = +597.88
FINAL RESULT = +597.88                                               
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算 cobol 中的四舍五入 的相关文章

  • Cobol 的优点是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我喜欢花时间研究语言的酷功
  • 读取 Cobol 生成的文件

    我目前正在编写一个 C 应用程序 该应用程序位于两个现有应用程序之间 我对第二个应用程序的了解是它处理第一个应用程序生成的文件 第一个应用程序是用 Cobol 编写的 脚步 1 Cobol 应用程序 写入一些文件并复制到目录中 2 第二个应
  • 是否有针对 Python、Ruby、Sql、Cobol、Perl 和 PL/SQL 的静态分析工具? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找一个针对 Pyt
  • 带符号的过度打孔值的解析器?

    我正在处理一些旧数据导入 并遇到了来自外部源的大量数据 这些数据用签名过冲 我见过很多 但这是在我的时代之前 在我开始创建一个函数来解析这些陌生人之前 我想检查一下是否有处理这些陌生人的标准方法 我想我的问题是 Net 框架是否提供了用于转
  • AS/400:使用COMPUTE功能,不同字段定义结果不一致

    我在使用 AS 400 中的 COMPUTE 函数时遇到了一个神秘的问题 场景如下 01 WSAA AMOUNT A PIC S9 15 V9 02 COMP 3 01 WSAA AMOUNT B 01 PIC S9 16 V9 02 VA
  • 用 cobol 计算变量的长度字符串

    我在数据库表中有一个注释 我如何计算该字符串的长度 我有一个变量定义如下 10 NOTE 49 NOTE LEN PIC S9 4 USAGE COMP 49 NOTE TEXT PIC X 500 Note 是一个 500 个字符的字符串
  • 读取 COBOL 中的 STDIN (SYSIN)

    我想从 COBOL 中的 STDIN 又名 SYSIN 中读取行 现在我只想把它们打印出来 这样我就知道我已经拿到了它们 从我读到的所有内容看来 这应该有效 IDENTIFICATION DIVISION PROGRAM ID APP EN
  • 将 COMP-3 压缩十进制字段解释为数值

    我正在创建一个 SSIS 包来从一系列抄写本文件中读取解压数据 我不确定以下字段定义的正确解释 希望有人知道 FIELD NAME 1 PIC S9 15 V9 3 COMP 3 FIELD NAME 2 PIC S9 3 V9 8 COM
  • 如何在 COBOL 中编写 SQLite 回调

    我是一名 COBOL 程序员 我最新的项目是将 COBOL 应用程序连接到 SQLite3 数据库 我一直在关注本指南 http www tutorialspoint com sqlite sqlite c cpp htm 他们的解决方案正
  • COBOL - 对于相同的计算,从大型机到 PC 的不同答案

    我有一个非常简单的虚拟 COBOL 程序 它执行虚拟计算并显示结果 ID DIVISION PROGRAM ID DUMMYPGM DATA DIVISION WORKING STORAGE SECTION 01 NUM A PIC 9 3
  • COBOL:GDG 文件描述符 (FD) 可以引用多代吗?

    我有一个程序可以读取 GDG 文件并将数据移动到工作存储 我很想知道是否可以使用对文件定义的引用对多代 GDG 重复此过程 也许有一种方法可以在文件定义上使用下标 我的想法是必须有一种方法将不同的文件定义移动到引用变量中以访问文件 基于建议
  • 计算 cobol 中的四舍五入

    我对 cobol 中计算函数的舍入感到困惑 宣言 VAR A PIC S9 9 V99 COMP 3 VAR B PIC S9 9 V9 6 COMP 3 程序 MOVE 12 08 TO VAR A MOVE 6 181657 TO VA
  • 是否有现有的 gem 或脚本可以将数字转换为 comp-3/压缩十进制格式?

    继续我将 COBOL 转换为 Ruby 程序的冒险 我必须将十进制数字转换为 comp 3 压缩十进制格式 有人知道一个简单的 Ruby 脚本或 gem 可以做到这一点吗 伯恩斯 Ruby 知道如何打包半字节 因此结果非常简单 def pa
  • 可变长度表中的内存分配

    假设我在中定义了以下可变长度表WORKING STORAGE 01 SOAP RECORD 05 SOAP INPUT PIC X 8 VALUE SPACES 05 SOAP STATUS PIC 9 VALUE ZERO 05 SOAP
  • 如何在大型机 COBOL 中“休眠”?

    我想我正在使用 Enterprise COBOL for z OS 模拟标准 C 库的 sleep 函数等功能的技术是什么 可能最简单的方法是使用语言环境可调用服务 https www ibm com docs en zos 2 4 0 t
  • 如何删除字符串中的尾随空格和嵌入空格?

    我正在编写一个程序 将国内和国际帐号转换为 IBAN 号码 首先 我需要形成一个字符串 银行 ID 分行 ID 帐号 ISO 国家 地区代码 这些字段中可能存在尾随空格 但并非每个帐号都具有相同的长度 有些帐号具有分支标识符 而其他帐号则没
  • 在 Mac OS 下设置 COBOL 编译器?

    在我的大学里 我们正在学习 COBOL 我正努力在明年上课之前抢先学习 COBOL C 和 Java 问题是 COBOL 是so旧的 很难在 mac 中获得对它的支持 我的笔记本电脑是 mac 我知道它在 Mac 上运行良好 但找到可以解释
  • 如何在.net中将数字格式化为S9(5)V99 ascii

    我一直在寻找 s9 5 v99 但得到了不同的信息 而且不太清楚 有人可以展示如何转换或转换公式吗 谢谢 您在这里向我们展示的是 这PICTURECOBOL 数据声明的子句部分 COBOL 数据声明有点奇怪 需要一些时间来适应 这是一个介绍
  • 在 Visual Studio Code 中设置 Cobol 制表符/缩进

    我刚刚在 Mac 上安装了 Visual Studio Code 让我发疯的是我无法设置制表符 缩进以匹配我喜欢的第 7 8 12 16 20 24 和 72 列的 Cobol 格式 我已经看到如何将制表符设置为 4 个空格 但这使我缩进到
  • 由尾随空格分隔的 Cobol 字符串

    WORKING STORAGE FIRST STRING PIC X 15 VALUE SPACES SECOND STRING PIC X 15 VALUE SPACES OUTPUT STRING PIC X 31 VALUE SPAC

随机推荐

  • 圆柱/圆锥上均匀生成 3D 点

    我希望在圆柱体和圆锥体上 分别 随机且均匀地生成点 圆柱体由其中心 半径和高度定义 锥体规格相同 我能够获得每个形状的边界框 因此我正在考虑在边界框内生成点 但是 我不确定如何将它们投影到圆柱体 圆锥体上 或者这是否是最好的主意 有什么建议
  • Redis 模仿 MASTER/MASTER?或者是其他东西?

    我已经阅读了这里的很多帖子并上网冲浪 但也许我没有问正确的问题 我知道 Redis 目前是主 从 直到 Cluster 可用 但是 我想知道是否有人可以告诉我如何在逻辑上配置 Redis 以满足我的需求 或者它是否不是正确的工具 设想 我们
  • 如何使用 XPath/XSLT fn:json-to-xml

    我需要将 JSON 字符串转换为 XML 字符串 标签确实包含属性 从答案中this https stackoverflow com questions 38783463 how to convert badgerfish style js
  • 多线程访问LinkedList时的线程安全

    我的应用程序需要保留对特定资源的请求的访问日志 并且多个线程将记录日志条目 唯一相关的信息是请求的时间戳 检索的统计信息将是过去 X 秒内发生的请求数量 返回给定秒数的统计信息的方法还需要支持多线程 我正在考虑使用以下方法来处理并发处理Lo
  • 列出多个jar文件的内容

    我正在一堆罐子里寻找 class 文件 jar tf abc jar 适用于一个文件 我试过 find name jar xargs jar tf 不打印任何内容 我能想到的唯一解决方案是全部解压 然后搜索 有没有更好的办法 我在 LUni
  • 我如何判断 RenderAction 是否正在调用我的操作?

    我有一个可能通过普通链接调用的操作 在这种情况下我会返回 View 或者也可以通过 AJAX 或 RenderAction 即作为子操作 调用它 在这种情况下我会返回一个 PartialView 整理 AJAX 部分很容易 但如何测试我的操
  • 尝试执行restclient请求时找不到合适的HttpMessageConverter

    我正在尝试使用Spring for Android rest client发送数据http post 以避免创建和解析 json 数据 来自他们的manual http static springsource org spring andr
  • 增加内存映射文件的大小[重复]

    这个问题在这里已经有答案了 可能的重复 如何动态扩展内存映射文件 https stackoverflow com questions 6096485 how to dynamically expand a memory mapped fil
  • workbox serviceworker 在除 Chrome 之外的任何地方工作:未捕获(承诺中)DOMException

    Workbox 无法在 Chrome 上运行 但在其他地方都可以运行 这很讽刺 因为我相信这是一个谷歌图书馆 显示的错误是 Uncaught in promise DOMException sw js line 1 Chrome Opera
  • 从 Python 中的嵌套列表中删除一列

    我需要帮助弄清楚如何从嵌套列表中删除 列 来修改它 说我有 L 1 2 3 4 5 6 7 8 9 1 2 3 我想删除第二列 因此值为 2 6 1 以获得 L 1 3 4 5 7 8 9 2 3 我一直不知道如何通过删除一列来修改列表 我
  • Qt:QTableWidget/QTableView 在整个视口中交替行颜色

    我有一个 QTableView 包含数据库中的数据行 但是 设置 setAlternatingRowColors true 仅交替具有数据的行颜色 表的其余部分只是白色 这不是您期望的行为 例如 查看任何浏览器的书签列表 空行具有交替颜色
  • Swift Firebase 快照到对象模型

    我正在使用一个大型 Firebase 数据库 该数据库至少有 6 层层次结构 并且每个节点有许多子节点 我想解析整个快照并将其转换为对象模型 我发现this https stackoverflow com questions 3551449
  • 检测何时位于字符串流的末尾

    我正在尝试编写一个函数来检测我何时几乎到达字符串流的末尾 但它似乎不起作用 这是一些代码 std string path 1 2 3 int number std stringstream ss path while ss eof if s
  • 从自制软件安装后无法使 ffmpeg 工作

    我通过自制程序安装了 ffmpeg 但是当我尝试运行它时 即使只是输入ffmpeg我收到以下错误消息 dyld Library not loaded usr local lib liblzma 5 dylib Referenced from
  • Android EGL/OpenGL ES 帧率卡顿

    TL DR 即使根本不进行任何绘制 在 Android 设备上的 OpenGL ES 渲染线程上保持 60Hz 的更新率似乎也是不可能的 神秘的峰值经常出现 在底部的代码中演示 而我为找出原因或如何导致的一切努力都导致了死胡同 在使用自定义
  • Spring MVC 和 Thymeleaf 资源版本控制

    我正在尝试使用 Spring Mvc 4 进行资源版本控制 我使用 thymeleaf 模板引擎 但不适用于以下代码 加载页面时 当我查看页面源代码时 我看不到新版本的 Url 那么我的代码有什么问题 我想念什么 Override publ
  • 如何从给定字符串查找给定编辑距离处的所有字符串

    我们都在谷歌中看到过 如果我们输入查询并输入错误 谷歌会建议一个更清晰的查询版本 通常是正确的 现在他们是怎么做到的呢 我能想到的一种可能的方法是找出距给定字符串编辑距离为 1 的所有其他字符串 如果其中任何一个返回具有更高值 search
  • 在绑定之前自动将一个数据框的所有列类型强制为另一个数据框的类型

    假设我有两个要绑定的数据框 ds a lt data frame x 1 6 y 5 z 4 l 2 stringsAsFactors FALSE ds b lt data frame x as factor 1 6 y 5 p 2 str
  • AFNetworking 和 jSON

    我正在跟踪来自 Web 服务 api 的 json 响应 我想从 json 中提取产品数据 我也想使用 AFNetworking 来实现这一点 products product id 1170 name zzzz sort order 0
  • 计算 cobol 中的四舍五入

    我对 cobol 中计算函数的舍入感到困惑 宣言 VAR A PIC S9 9 V99 COMP 3 VAR B PIC S9 9 V9 6 COMP 3 程序 MOVE 12 08 TO VAR A MOVE 6 181657 TO VA