C++ で Int にフロートを変換する
胡金庫
2023年10月12日
この記事では、C++ で float
を int
に変換する方法について、複数の方法を示します。
直接代入を使用してフロートを整数に変換する
float
と int
の変換は代入演算子を用いて行うことができます。この場合、変数 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
を用いて float
を int
に変換する
最近の 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;
著者: 胡金庫