Cómo convertir Float en Int en C++
-
Usar la asignación directa para convertir un
float
enint
-
Usar el molde de estilo C para convertir el
float
a int -
Usa
static_cast
para convertir Float a Int
Este artículo demostrará múltiples métodos sobre cómo convertir un float
en un int
en C++.
Usar la asignación directa para convertir un float
en int
La conversión entre los valores de float
y int
se puede hacer usando el operador de asignación. En este caso, la variable float
se convertirá implícitamente al tipo int
, y el valor se reducirá al segundo tipo, perdiendo todos los dígitos después del punto decimal. Note que usamos un vector de int
para almacenar el float
y luego dar salida a cada entero a la consola para una mejor demostración.
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
int main() {
vector<float> f_vec{12.123, 32.23, 534.333333339};
vector<int> i_vec;
i_vec.reserve(f_vec.size());
for (const auto &f : f_vec) {
i_vec.push_back(f);
}
for (const auto &i : i_vec) {
cout << i << "; ";
}
cout << endl;
return EXIT_SUCCESS;
}
Resultado:
12; 32; 534;
Usar el molde de estilo C para convertir el float
a int
Otra solución es un molde de estilo C con (typename)
notación. Este método se considera normalmente inseguro en el C++ moderno, pero si el programador lo usa correctamente, el código se ejecutará como se espera. Nota: nunca lances punteros a clases incompletas ya que puede llevar a un comportamiento indefinido.
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
int main() {
vector<float> f_vec{12.123, 32.23, 534.333333339};
vector<int> i_vec;
i_vec.reserve(f_vec.size());
for (const auto &f : f_vec) {
i_vec.push_back(int(f));
}
for (const auto &i : i_vec) {
cout << i << "; ";
}
cout << endl;
return EXIT_SUCCESS;
}
Resultado:
12; 32; 534;
Usa static_cast
para convertir Float a Int
Según la recomendación del C++ moderno, uno debe utilizar named cast para convertir un valor float
en un número entero. static_cast
convierte los tipos sin comprobar el valor, por lo que el programador es responsable de asegurar la corrección. Nótese que los named casts y su comportamiento es bastante complicado de comprender con una sola visión general, así que aquí está el manual completo de static_cast
que enumera todos los casos y características de los bordes.
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
int main() {
vector<float> f_vec{12.123, 32.23, 534.333333339};
vector<int> i_vec;
i_vec.reserve(f_vec.size());
for (const auto &f : f_vec) {
i_vec.push_back(static_cast<int>(f));
}
for (const auto &i : i_vec) {
cout << i << "; ";
}
cout << endl;
return EXIT_SUCCESS;
}
Resultado:
12; 32; 534;
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