Curso de Cobol y PowerCobol

Redondeo y resto en operaciones con COBOL

Capítulo 29: Redondear decimales y obtener el resto en divisiones

El uso de ROUNDED

Ya que hemos vuelto a los cálculos matemáticos, es buen momento para enseñarte a utilizar ROUNDED. Gracias al uso de esta palabra, podrás redondear automáticamente la parte decimal si no cabe en la parte decimal del PICTURE.

Empecemos viendo su uso en un COMPUTE.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo29.

       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.
       77  Numero1 PIC 99V999 VALUE 10,556.
       77  Numero2 PIC 99 VALUE 20.
       77  Resultado PIC 99V99 VALUE ZEROS.

       PROCEDURE DIVISION.
       Calcula.
       COMPUTE Resultado = Numero1 + Numero2.
       DISPLAY Resultado.

       STOP RUN.
       END PROGRAM Capitulo29.

El resultado no está siendo redondeado. Solo se está eliminando la parte que no cabe en el PICTURE.

30,55

Sin embargo, con el uso de ROUNDED allá donde lo necesitemos, vamos a dejar el número redondeado.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo29.

       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.
       77  Numero1 PIC 99V999 VALUE 10,556.
       77  Numero2 PIC 99 VALUE 20.
       77  Resultado PIC 99V99 VALUE ZEROS.

       PROCEDURE DIVISION.
       Calcula.
       COMPUTE Resultado ROUNDED = Numero1 + Numero2.
       DISPLAY Resultado.

       STOP RUN.
       END PROGRAM Capitulo29.
30,56

Ten en cuenta que el redondeo funciona como en la siguiente tabla:

Valor sin redondeo Valor redondeado
10,550 10,55
10,553 10,55
10,555 10,56
10,559 10,56

Esto también es aplicable al resto de verbos de operaciones aritméticas.

ADD Numero1 TO Numero2 GIVING Resultado ROUNDED.
SUBTRACT Numero1 FROM Numero2 GIVING Resultado ROUNDED.
MULTIPLY Numero1 BY Numero2 GIVING Resultado ROUNDED.
DIVIDE Numero1 BY Numero2 GIVING Resultado ROUNDED.

Obtener el resto en las divisiones

Ya que hemos vuelto con las operaciones aritméticas, te voy a mostrar como obtener el resto de una división.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo29.

       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.
       77  Numero1 PIC 99 VALUE 10.
       77  Numero2 PIC 99 VALUE 3.
       77  Resultado PIC 9 VALUE ZEROS.
       77  Resto PIC 9 VALUE ZEROS.

       PROCEDURE DIVISION.
       Calcula.
      *> Realiza una división obteniendo el resultado y el resto.
       DIVIDE Numero1 BY Numero2 GIVING Resultado REMAINDER Resto.
       DISPLAY "El resultado de la división es: " Resultado.
       DISPLAY "El resto de la división es: " Resto.

       STOP RUN.
       END PROGRAM Capitulo29.

Gracias al uso del nuevo verbo REMAINDER podemos devolver el resto en las operaciones con DIVIDE.

El resultado de la división es: 3
El resto de la división es: 1

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.