HOWTO · C++

Converter Float em Int em C++

Este artigo introduz como converter um float para um int em C++

Nesta página

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;