Rumah >pembangunan bahagian belakang >C++ >Mengapakah `std::cout.precision()` tidak memaparkan sifar mengekor dalam nombor titik terapung dalam C ?

Mengapakah `std::cout.precision()` tidak memaparkan sifar mengekor dalam nombor titik terapung dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-11-10 11:41:03763semak imbas

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

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

Apabila bekerja dengan nombor titik terapung dalam C , Kaedah std::cout.precision() adalah penting untuk mengawal bilangan tempat perpuluhan yang dipaparkan. Walau bagaimanapun, dalam kes tertentu, pengguna menghadapi hasil yang tidak dijangka, seperti ketiadaan sifar tertinggal.

Pertimbangkan kod berikut:

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

Kod ini cuba mencetak hasil pembahagian dua integer (5 dan 10) dengan ketepatan 4 tempat perpuluhan. Walau bagaimanapun, output ialah "0.5" dan bukannya "0.5000" yang dijangkakan.

Sebab bagi tingkah laku ini terletak pada fakta bahawa nombor 'a' dan 'b' pada mulanya disimpan sebagai integer. Apabila kita melakukan pembahagian, hasilnya juga adalah integer secara lalai. Untuk memaparkan nombor titik terapung dengan betul, kita perlu menghantarnya secara eksplisit ke terapung, seperti yang dilihat dalam baris:

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

Walau bagaimanapun, walaupun selepas dihantar ke terapung, ketiadaan sifar mengekor berterusan. Di sinilah manipulator std::fixed mula bermain. Untuk memastikan sifar mengekor dipaparkan, kita mesti menghantar std::fixed manipulator ke std::cout. Manipulator ini membundarkan nilai titik terapung dan memaparkannya dalam tatatanda titik tetap.

Kod yang diperbetulkan ialah:

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;
}

Dengan kemasukan std::fixed, output kini dengan betul memaparkan "0.5000", mematuhi ketepatan yang ditentukan sebanyak 4 tempat perpuluhan.

Atas ialah kandungan terperinci Mengapakah `std::cout.precision()` tidak memaparkan sifar mengekor dalam nombor titik terapung dalam C ?. 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