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!