C++ で Int にフロートを変換する

胡金庫 2023年10月12日
  1. 直接代入を使用してフロートを整数に変換する
  2. C スタイルのキャストを使って Float を Int に変換する
  3. static_cast を用いて floatint に変換する
C++ で Int にフロートを変換する

この記事では、C++ で floatint に変換する方法について、複数の方法を示します。

直接代入を使用してフロートを整数に変換する

floatint の変換は代入演算子を用いて行うことができます。この場合、変数 float は暗黙のうちに int 型に変換され、値は小数点以下の桁数をすべてなくして 2 番目の型に絞られます。なお、float を格納するために int 型のベクトルを用い、各整数をコンソールに出力していることに注意してください。

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

出力:

12; 32; 534;

C スタイルのキャストを使って Float を Int に変換する

もう一つの解決策は、(typename) 記法を用いた C スタイルのキャストです。このメソッドは通常、現代の C++ では安全ではないと考えられていますが、プログラマがこれを正しく使えば、コードは期待通りに実行されます。不完全なクラスへのポインタをキャストしないように注意してください。

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

出力:

12; 32; 534;

static_cast を用いて floatint に変換する

最近の C++ の推奨事項として、float の値を整数に変換するには名前付きキャストを利用すべきです。static_cast は値をチェックせずに型を変換します。名前付きキャストとその振る舞いは一度に概要を把握するには非常に複雑なので、以下に static_cast完全マニュアルにすべてのエッジケースと機能をリストアップしています。

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

出力:

12; 32; 534;
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Float