Curso de Cobol y PowerCobol

Operaciones matemáticas con decimales en COBOL

Capítulo 15: Operaciones aritméticas con decimales

En este capítulo vamos a añadir al programa del capítulo anterior la posibilidad de incluir números decimales en las operaciones aritméticas.

Operaciones con decimales en COBOL

Para los números decimales tenemos que añadir donde vaya el punto decimal una V al PICTURE. Esto tiene que estar de forma coherente.

Si creas dos variables como estas, con dos dígitos enteros y dos dígitos decimales. El PICTURE donde se almacene el resultado de la operación, también debe tener aparte de los números enteros, los dos decimales, ni uno menos, ya que si haces esto, se pierden los decimales:

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo15.

       ENVIRONMENT DIVISION.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *> Variables de números.
       01 Numero1 PIC 99V99 VALUE 10.55.
       01 Numero2 PIC 99V99 VALUE 65.20.
      *> Variable para almacenar el resultado.
       01 Resultado PIC 9999 VALUE ZERO.
       PROCEDURE DIVISION.
       MuestraResultado.
           DISPLAY Resultado.
       STOP RUN.

       END PROGRAM Capitulo15.

Esto devuelve un valor entero y perdemos el valor decimal.

0075

Lo correcto, es cambiar el PICTURE de la variable Resultado:

01 Resultado PIC 99V99 VALUE ZERO.
75.75

Números decimales negativos en COBOL

Vamos a combinar también números decimales con la posibilidad de tener valor negativo. Para eso utilizamos el PICTURE S.

Esta S no tiene porqué ponerse en las variables de números, ya que el resultado de una resta podría devolver un número negativo, solo lo queremos en Resultado.

En este caso, es una suma y devuelve un número positivo:

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo15.

       ENVIRONMENT DIVISION.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *> Variables de números.
           01 Numero1 PIC 99V99 VALUE 10.55.
           01 Numero2 PIC 99V99 VALUE 65.20.
      *> Variable para almacenar el resultado.
           01 Resultado PIC S99V99 VALUE ZERO.
       PROCEDURE DIVISION.
       MuestraResultado.
      *> Calcula el resultado
           COMPUTE Resultado = Numero1 - Numero2.
      *> Muestra el resultado
           DISPLAY Resultado.
       STOP RUN.

       END PROGRAM Capitulo15.

En este caso, es una suma y devuelve un número positivo:

+75.75

Si ponemos una resta, el resultado de 10.55 - 65.20 nos da un número negativo.

COMPUTE Resultado = Numero1 - Numero2.
-54.65

Cambiar el punto decimal por coma en COBOL

Por si no lo recuerdas, cuando hablé de las divisiones, hablé por encima de la posibilidad de cambiar los puntos decimales por comas decimales.

Si te fijas el punto del decimal puede crear algo de confusión al ser igual que el punto que finaliza el párrafo. Quizás quieras cambiar esto. Para hacerlo, añade la sección CONFIGURATION SECTION y el párrafo SPECIAL-NAMES al programa.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo15.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
      *> Especificamos que el punto decimal es una coma.
           DECIMAL-POINT IS COMMA.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *> Variables de números.
           01 Numero1 PIC 99V99 VALUE 10,55.
           01 Numero2 PIC 99V99 VALUE 65,20.
      *> Variable para almacenar el resultado.
           01 Resultado PIC S99V99 VALUE ZERO.
       PROCEDURE DIVISION.
       MuestraResultado.
      *> Calcula el resultado.
           COMPUTE Resultado = Numero1 - Numero2.
      *> Muestra el resultado.
           DISPLAY Resultado.
       STOP RUN.

       END PROGRAM Capitulo15.

Acuérdate de esto, porque ahora, los puntos aún estando en un número van a funcionar como final de instrucción.

Como curiosidad con los puntos para finalizar frases (instrucciones), si ponemos más de uno, OpenCobolIDE nos va a dar un warning de punto redundante, no obstante, no hace fallar al compilador. Aquí tienes un ejemplo:

01 Numero1 PIC 99V99 VALUE 10,55.....
Ignoring redundant '.' (ignorando los puntos redundantes).

Comentarios

Si te quedan dudas sobre el temario, sobre Cobol, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.