Rumah >pembangunan bahagian belakang >C++ >Mengapakah `std::cout.precision()` Tidak Memaparkan Sifar Mengekor untuk Nombor Titik Terapung?

Mengapakah `std::cout.precision()` Tidak Memaparkan Sifar Mengekor untuk Nombor Titik Terapung?

Susan Sarandon
Susan Sarandonasal
2024-11-08 21:14:01580semak imbas

Why Does  `std::cout.precision()` Not Display Trailing Zeros for Floating-Point Numbers?

std::cout.precision() dan Trailing Zeros

Memahami penggunaan std::cout.precision() yang betul adalah penting apabila memaparkan nombor titik terapung. Dalam artikel ini, kami akan mengkaji contoh khusus untuk menyelesaikan tingkah laku yang tidak dijangka.

Kod dan Isu Awal

Pertimbangkan kod berikut yang cuba memaparkan hasil daripada membahagikan dua integer sebagai nombor titik terapung:

#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 dijangka memaparkan 0.5000, tetapi sebaliknya, ia mencetak 0.5. Percanggahan ini timbul kerana sifat jenis data asal ialah integer.

Penyelesaian: std::Manipulator tetap

Untuk memaparkan sifar mengekor bagi nombor titik terapung, anda mesti lulus std::fixed manipulator kepada std::cout. Manipulator ini memastikan bahawa perwakilan perpuluhan menggunakan tatatanda titik tetap, mengekalkan sifar mengekor.

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

Dengan manipulator tetap std::, kod kini mencetak 0.5000 dengan betul. Manipulator std::setprecision() tetap bertanggungjawab untuk menentukan bilangan tempat perpuluhan yang dikehendaki.

Atas ialah kandungan terperinci Mengapakah `std::cout.precision()` Tidak Memaparkan Sifar Mengekor untuk Nombor Titik Terapung?. 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