Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa `std::cout.precision()` Tidak Memaparkan Sifar Jejak seperti yang Dijangkakan?

Mengapa `std::cout.precision()` Tidak Memaparkan Sifar Jejak seperti yang Dijangkakan?

Susan Sarandon
Susan Sarandonasal
2024-11-11 08:26:02239semak imbas

Why Doesn't `std::cout.precision()` Display Trailing Zeros as Expected?

Penggunaan std::cout.precision() yang Betul untuk Paparan Sifar Mengekor

Ketepatan yang dinyatakan menggunakan std::cout.precision( ) menentukan bilangan tempat perpuluhan yang akan disertakan semasa memformat nombor titik terapung. Walau bagaimanapun, dalam sesetengah kes, sifar mengekor mungkin tidak dipaparkan seperti yang dijangkakan.

Pertimbangkan coretan kod berikut:

#include <iostream>
#include <stdlib.h>

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

Kod ini cuba mengeluarkan hasil pembahagian dua integer sebagai terapung -nombor titik dengan ketepatan empat tempat perpuluhan. Walau bagaimanapun, output menunjukkan "0.5" dan bukannya "0.5000" yang dijangkakan. Ini berlaku kerana jenis data integer secara tersirat ditukar kepada titik terapung semasa melakukan pembahagian, tetapi ketepatan tidak digunakan secara khusus pada penukaran integer-ke-apung.

Untuk memaparkan sifar mengekor dengan betul, tambahan manipulator, std::fixed, mesti digunakan dengan std::cout:

#include <iostream>
#include <stdlib.h>
#include <iomanip>

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

The std::manipulator tetap mengarahkan std::cout untuk mengeluarkan nombor titik terapung dalam tatatanda titik tetap, yang termasuk sifar mengekor. Manipulator std::setprecision(4) menentukan bahawa output harus mempunyai ketepatan empat tempat perpuluhan.

Dengan memasukkan manipulator tetap std::, output coretan kod kini memaparkan sifar mengekor dengan betul, menghasilkan dalam "0.5000" seperti yang dijangkakan.

Atas ialah kandungan terperinci Mengapa `std::cout.precision()` Tidak Memaparkan Sifar Jejak seperti yang Dijangkakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn