La funzione Round in C

Jinku Hu 12 ottobre 2023
  1. Usa la funzione round per arrotondare il numero a virgola mobile al numero intero più vicino e restituire il numero a virgola mobile
  2. Usa la funzione lround per arrotondare il numero a virgola mobile al numero intero più vicino e restituire il tipo integrale
  3. Utilizzare la funzione ceil per arrotondare il numero in virgola mobile al valore integrale più piccolo non inferiore all’argomento
La funzione Round in C

Questo articolo spiegherà diversi metodi su come utilizzare la funzione round in C.

Usa la funzione round per arrotondare il numero a virgola mobile al numero intero più vicino e restituire il numero a virgola mobile

La funzione round fa parte delle utilità matematiche della libreria standard C definite nel file di intestazione <math.h>. Ci sono tre funzioni in questa famiglia: round, roundf e roundl. Queste funzioni sono per diversi tipi di numeri in virgola mobile e ciascuna restituisce il valore del tipo corrispondente. Nota che i file sorgente, inclusa l’intestazione math, devono essere compilati usando il flag -lm per collegare il codice della libreria. Nel seguente codice di esempio, dimostriamo le conversioni per più valori letterali float e inviamo i risultati alla console. Notare che round essenzialmente arrotonda lontano dallo zero. Se il valore integrale, -0, +0, NaN o INFINITY viene passato come argomento, viene restituito lo stesso valore.

#include <fenv.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  printf("round(+2.3) = %+.1f\n", round(2.3));
  printf("round(+2.5) = %+.1f\n", round(2.5));
  printf("round(+2.7) = %+.1f\n", round(2.7));
  printf("round(-2.3) = %+.1f\n", round(-2.3));
  printf("round(-2.5) = %+.1f\n", round(-2.5));
  printf("round(-2.7) = %+.1f\n", round(-2.7));

  exit(EXIT_SUCCESS);
}

Produzione:

round(+2.3) = +2.0
round(+2.5) = +3.0
round(+2.7) = +3.0
round(-2.3) = -2.0
round(-2.5) = -3.0
round(-2.7) = -3.0

Usa la funzione lround per arrotondare il numero a virgola mobile al numero intero più vicino e restituire il tipo integrale

La funzione lround, invece, arrotonda al numero intero più vicino e restituisce il valore integrale. Ci sono sei funzioni in questa famiglia, la metà delle quali restituisce long int come valore arrotondato e altre - long long int. lround simile alla famiglia round arrotonda i numeri reali a metà distanza da zero.

#include <fenv.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  printf("lround(+2.3) = %ld\n", lround(2.3));
  printf("lround(+2.5) = %ld\n", lround(2.5));
  printf("lround(+2.7) = %ld\n", lround(2.7));
  printf("lround(-2.3) = %ld\n", lround(-2.3));
  printf("lround(-2.5) = %ld\n", lround(-2.5));
  printf("lround(-2.7) = %ld\n", lround(-2.7));

  exit(EXIT_SUCCESS);
}

Produzione:

lround(+2.3) = 2
lround(+2.5) = 3
lround(+2.7) = 3
lround(-2.3) = -2
lround(-2.5) = -3
lround(-2.7) = -3

Utilizzare la funzione ceil per arrotondare il numero in virgola mobile al valore integrale più piccolo non inferiore all’argomento

In alternativa, la funzione ceil può essere utilizzata per arrotondare il numero in virgola mobile dato al valore intero più piccolo che non è inferiore all’argomento stesso. Simile alla funzione round, ci sono anche tre funzioni in questa famiglia - ceil, ceilf e ceill da utilizzare rispettivamente per i tipi float, double e long double. Nota che includiamo il segno + nella stringa di specificazione prinf e mostra automaticamente i segni corrispondenti per gli argomenti arrotondati.

#include <fenv.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  printf("ceil(+2.3) = %+.1f\n", ceil(2.3));
  printf("ceil(+2.5) = %+.1f\n", ceil(2.5));
  printf("ceil(+2.7) = %+.1f\n", ceil(2.7));
  printf("ceil(-2.3) = %+.1f\n", ceil(-2.3));
  printf("ceil(-2.5) = %+.1f\n", ceil(-2.5));
  printf("ceil(-2.7) = %+.1f\n", ceil(-2.7));

  exit(EXIT_SUCCESS);
}

Produzione:

ceil(+2.3) = 3.000000
ceil(+2.5) = 3.000000
ceil(+2.7) = 3.000000
ceil(-2.3) = -2.000000
ceil(-2.5) = -2.000000
ceil(-2.7) = -2.000000
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - C Math