rspec/rules/S3580/cobol/rule.adoc
2022-02-04 16:28:24 +00:00

45 lines
1.5 KiB
Plaintext

Performing math on variables that are declared - explicitly or implicitly - as ``++DISPLAY++`` or ``++NATIONAL++`` is much less efficient than on ``++COMPUTATIONAL++``, ``++COMP++``, or ``++BINARY++`` variables. That's because ``++COMP++`` variables, for instance, are defined for binary storage, which makes math on them more efficient. That's why values that are going to be used primarily for math should be declared with a math type. When math isn't a primary use, it may not make sense to change the declared type, but ``++MOVE++``ing the value to a ``++COMP++`` variable and performing the math on it instead would.
It is important to note however, that ``++COMPUTATIONAL++``, ``++COMP++``, and ``++BINARY++`` formats should be used with caution if the variable will be passed to other systems which may not use the same storage format.
== Noncompliant Code Example
[source,cobol]
----
01 W-AMOUNT-VALUE PIC 9(17).
01 W-AMOUNT-DECIMAL PIC 9.
COMPUTE W-CONV-AMOUNT = W-AMOUNT-VALUE * 10 ** W-AMOUNT-DECIMAL *> Noncompliant
----
== Compliant Solution
[source,cobol]
----
01 W-AMOUNT-VALUE PIC 9(17) COMP-5.
01 W-AMOUNT-DECIMAL PIC 9 COMP-5.
COMPUTE W-CONV-AMOUNT = W-AMOUNT-VALUE * 10 ** W-AMOUNT-DECIMAL
----
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
include::message.adoc[]
include::highlighting.adoc[]
'''
== Comments And Links
(visible only on this page)
include::comments-and-links.adoc[]
endif::env-github,rspecator-view[]