
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.