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
Lepaskan: 2024-11-10 11:41:03
asal
762 orang telah melayarinya

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;
}
Salin selepas log masuk

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";
Salin selepas log masuk

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan