如何在 C++ 中把浮點數轉換為整數

Jinku Hu 2023年10月12日
  1. 使用直接賦值將浮點數轉換為整數
  2. 使用 C-style Cast 將浮點數轉換為整數
  3. 使用 static_cast 將浮點數轉換為整數
如何在 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;
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Float