【问题标题】:To control cobol decimal points控制cobol小数点
【发布时间】:2022-11-30 08:55:24
【问题描述】:

我想在输入为 15.65778 时编写一个 cobol 程序,然后输出应该为 15.66 当我的输入是 15.65000 时,输出应该是 15.65。 这里的规则基本上是小数点后两位数,如果它为零,那么输出应该相同,否则输入应该增加 0.1

我期待一个解决方案。

【问题讨论】:

  • “我期待一个解决方案。”那么您在错误的站点上,您应该从参观中知道。这不是 SO 的工作原理。 “展示您尝试过的代码以及无效的代码”...
  • 到目前为止你尝试了什么?你发现了什么问题?
  • @SimonSobisch-请求a software algorithm被允许。在这些情况下,代码可能无法用于调试直到算法已知并实现。

标签: cobol


【解决方案1】:

在这种情况下,内部函数REM 可用于确定是否增加否则被截断的值。

代码:

   data division.
   working-storage section.
   01 values-table.
     03 pic 99v9(5) value 15.65000.
     03 pic 99v9(5) value 15.65001.
     03 pic 99v9(5) value 15.65778.
   01 redefines values-table.
     03 values-entry pic 99v9(5) occurs 3 indexed idx.
   01 r pic v9(5).     *> remainder
   01 out-value pic 99.9(5).
   01 out-result pic 99.99.
   procedure division.
       perform varying idx from 1 by 1
       until idx > 3
           move values-entry (idx) to out-value

           *> find the value beyond two decimal places
           compute r = function rem (values-entry (idx) 0.01)

           *> if that value is greater than zero
           if r > 0

               *> add 0.01 before truncating the result
               compute out-result = values-entry (idx) + 0.01
           else

               *> otherwise truncate the result
               move values-entry (idx) to out-result
           end-if

           display out-value " : " out-result
       end-perform
       goback
       .

输出:

15.65000 : 15.65
15.65001 : 15.66
15.65778 : 15.66

【讨论】:

    【解决方案2】:

    假设你的输入是 pic 99v9(5) 并且输出是 pic 99v99 你可以试试这个:

    IF input(5:1) > 4 OR = ZERO 
       COMPUTE res ROUNDED = input
    ELSE
       COMPUTE res = input + 0.01
    ENDIF  
    

    输入输出:

    15.65778 --> 15.66

    15.65000 --> 15.65

    15.65122 --> 15.66

    【讨论】:

    • pic 99.9(5) 是数字编辑的。 COMPUTE 需要数字;因此应该使用pic 99v9(5)
    • 是的,这当然是我的意思
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多