首頁 >後端開發 >C++ >為什麼 `std::cout. precision()` 不顯示 C 中浮點數的尾隨零?

為什麼 `std::cout. precision()` 不顯示 C 中浮點數的尾隨零?

Barbara Streisand
Barbara Streisand原創
2024-11-10 11:41:03763瀏覽

Why doesn't `std::cout.precision()` display trailing zeros in floating-point numbers in C  ?

正確使用std::cout. precision() 顯示尾隨零

在C 處理浮點數時, std::cout. precision() 方法對於控制顯示的小數位數至關重要。但是,在某些情況下,使用者會遇到意外結果,例如缺少尾隨零。

考慮以下程式碼:

int main() {
  int a = 5;
  int b = 10;
  std::cout.precision(4);
  std::cout << (float)a / (float)b << "\n";
  return 0;
}

此程式碼嘗試列印兩個整數相除的結果(5 和 10),精確到小數點後 4 位。然而,輸出是“0.5”而不是預期的“0.5000”。

這種行為的原因在於數字「a」和「b」最初儲存為整數。當我們執行除法時,結果預設也是一個整數。為了正確顯示浮點數,我們需要明確地將它們轉換為浮點數,如以下行所示:

std::cout << (float)a / (float)b << "\n";

但是,即使在轉換為浮點數之後,仍然缺少尾隨零。這就是 std::fixed 操縱器發揮作用的地方。為了確保顯示尾隨零,我們必須將 std::fixed 操縱器傳遞給 std::cout。此操縱器對浮點數值進行舍入並以定點表示法顯示它。

修正後的程式碼是:

int main() {
  int a = 5;
  int b = 10;
  std::cout << std::fixed;
  std::cout.precision(4);
  std::cout << (float)a / (float)b << "\n";
  return 0;
}

包含 std::fixed 後,輸出現在正確顯示“0.5000”,遵循指定的 4 位小數精度。

以上是為什麼 `std::cout. precision()` 不顯示 C 中浮點數的尾隨零?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn