Arrotondare un Double a un Int in C++
-
Utilizzare la funzione
round()
per l’arrotondamento da doppio a int -
Usa la funzione
lround()
per convertire il doppio nel numero intero più vicino -
Usa la funzione
trunc()
per l’arrotondamento da doppio a int
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
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