如何在 C++ 中把浮點數轉換為整數
本文將演示如何在 C++ 中把浮點型轉換為整型的多種方法。
使用直接賦值將浮點數轉換為整數
浮點數和整數值之間的轉換可以使用賦值運算子來完成。在這種情況下,浮點型變數將被隱式轉換為整型型別,值將被縮小到第二種型別,失去小數點後的所有數字。注意,我們使用 int
的向量來儲存 float
,然後將每個整數輸出到控制檯,以便更好的演示。
#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-style Cast 將浮點數轉換為整數
另一種解決方案是用 (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
將浮點數轉換為整數
根據現代 C++ 的建議,應該利用命名轉換法將浮點數值轉換為整數。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;
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