Arrotondare un Double a un Int in C++

Jinku Hu 12 ottobre 2023
  1. Utilizzare la funzione round() per l’arrotondamento da doppio a int
  2. Usa la funzione lround() per convertire il doppio nel numero intero più vicino
  3. Usa la funzione trunc() per l’arrotondamento da doppio a int
Arrotondare un Double a un Int in C++

Questo articolo spiegherà diversi metodi su come arrotondare un double a un numero intero in C++.

Utilizzare la funzione round() per l’arrotondamento da doppio a int

La funzione round() è definita nell’intestazione <cmath>. Può calcolare il valore intero più vicino dell’argomento passato dall’utente. I casi a metà vengono arrotondati da zero e il valore restituito è lo stesso tipo dell’argomento. Nell’esempio seguente, inizializziamo un vettore arbitrario di double e visualizziamo la funzione round() per ogni elemento.

#include <cmath>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<double> dfloats{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : dfloats) {
    cout << "round(" << item << ") = " << round(item) << endl;
  }

  return EXIT_SUCCESS;
}

Produzione:

round(-3.5) = -4
round(-21.1) = -21
round(-1.99) = -2
round(0.129) = 0
round(2.5) = 3
round(3.111) = 3

Usa la funzione lround() per convertire il doppio nel numero intero più vicino

In alternativa, possiamo usare la funzione lround(), che si comporta in modo quasi identico a round() con una differenza: restituisce il valore in un formato intero lungo. Si noti che, per entrambe le funzioni, il valore restituito può essere imprevisto, causato da diversi errori di arrotondamento, che sono onnipresenti. Gli scenari corrispondenti devono essere gestiti come specificato nella documentazione qui.

#include <cmath>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<double> dfloats{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : dfloats) {
    cout << "round(" << item << ") = " << lround(item) << endl;
  }

  return EXIT_SUCCESS;
}

Usa la funzione trunc() per l’arrotondamento da doppio a int

trunc() è un’altra funzione utile dell’intestazione <cmath>, che calcola il numero intero più vicino non maggiore del numero passato come argomento. trunc() calcola il valore di ritorno nel formato a virgola mobile come round(). Nota che queste due funzioni non hanno alcun effetto dalla modalità di arrotondamento corrente. I casi di gestione degli errori sono descritti nella pagina di manuale.

#include <cmath>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<double> dfloats{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : dfloats) {
    cout << "round(" << item << ") = " << trunc(item) << endl;
  }

  return EXIT_SUCCESS;
}
round(-3.5) = -3
round(-21.1) = -21
round(-1.99) = -1
round(0.129) = 0
round(2.5) = 2
round(3.111) = 3
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++ Double