Converter Float em Int em C++

  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

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

Artigo relacionado - C++ Float

  • Como Converter Flutuador em string em C++
  • Gerar um número aleatório entre 0 e 1 em C++