Converter Float em Int em C++

Jinku Hu 12 outubro 2023
  1. Utilizar a atribuição directa para converter um float em int em C++
  2. Utilizar o estilo C para converter o float em int
  3. Utilize static_cast para Converter Flutuador em Int
Converter Float em Int em C++

Este artigo irá demonstrar múltiplos métodos de como converter um float para um int em C++.

Utilizar a atribuição directa para converter um float em int em C++

A conversão entre os valores float e int pode ser feita utilizando o operador de atribuição. Neste caso, a variável float será implicitamente convertida para o tipo int, e o valor será reduzido para o segundo tipo, perdendo todos os dígitos após o ponto decimal. Note-se que utilizamos um vector de int para armazenar o float e depois emitimos cada número inteiro para consola para melhor demonstração.

#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;

Utilizar o estilo C para converter o float em int

Outra solução é um molde ao estilo C com nome do tipo. Este método é geralmente considerado inseguro em C++ moderno, mas se o programador o utilizar correctamente, o código será executado como esperado. Nota para nunca lançar apontadores para classes incompletas, pois pode levar a um comportamento 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;

Utilize static_cast para Converter Flutuador em Int

De acordo com a recomendação C++ moderna, deve-se utilizar o lista nomeado para converter um valor float a um inteiro. O static_cast converte os tipos sem verificar o valor; daí que o programador seja responsável por assegurar a correcção. Note-se que os moldes nomeados e o seu comportamento é bastante complicado de apreender com uma única visão geral, por isso aqui está o manual completo do static_cast que lista todas as caixas e características de borda.

#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;
Autor: 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

Artigo relacionado - C++ Float