Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah fmt.Printf Mengendalikan Sifar Utama Apabila Menggunakan Lebar dan Ketepatan untuk Nilai Titik Terapung?

Bagaimanakah fmt.Printf Mengendalikan Sifar Utama Apabila Menggunakan Lebar dan Ketepatan untuk Nilai Titik Terapung?

Linda Hamilton
Linda Hamiltonasal
2024-10-26 02:05:28644semak imbas

  How Does fmt.Printf Handle Leading Zeros When Using Width and Precision for Floating-Point Values?

fmt.Printf Lebar dan Percanggahan Sintaks Ketepatan

Penggunaan fmt.Printf dengan medan lebar dan ketepatan untuk nilai titik terapung boleh mengelirukan kerana percanggahan dalam dokumentasi. Pernyataan:

"Untuk nilai titik terapung, lebar menetapkan lebar minimum medan dan ketepatan menetapkan bilangan tempat selepas perpuluhan, jika sesuai, kecuali untuk %g/%G ia menetapkan jumlah bilangan digit."

Walaupun betul dari segi tatabahasa, ia membawa kepada kekaburan kerana "ia" merujuk kepada ketepatan dan bukannya lebar. Ini boleh mengakibatkan tingkah laku pemformatan yang tidak dijangka.

Ketepatan untuk Notasi Titik Terapung

Pertimbangkan nilai titik terapung berikut:

123.45
12312.2
1.6069
0.6069
0.0006069

Apabila menggunakan fmt.Printf("%.4g"), outputnya ialah:

123.5
1.231e+04
1.607
0.6069
0.0006069

Perhatikan bahawa medan ketepatan (.4) menentukan jumlah bilangan digit, tidak termasuk titik perpuluhan dan eksponen. Oleh itu, walaupun dua nilai terakhir mempunyai sifar pendahuluan, ia masih dikira sebagai digit dan tidak dipotong.

Spesifikasi Lebar

Sebaliknya, medan lebar (cth., g) menentukan lebar minimum medan, termasuk titik perpuluhan dan eksponen. Jika nilai yang diformatkan melebihi lebar ini, ia tidak akan dipotong. Sifar pendahuluan, walau bagaimanapun, tidak dikira ke arah lebar sehingga terdapat empat atau lebih sifar pendahuluan.

Contoh

Dalam kes anda, rentetan format .9g menentukan lebar minimum 10 dan jumlah bilangan digit 9, tidak termasuk sifar pendahuluan. Pemformatan yang terhasil ialah:

0.0606060606060606: 9 digits, 12 width
0.3333333333333333: 9 digits, 11 width
0.05: 3 digits, 10 width (padded with spaces)
0.4: 2 digits, 10 width (padded with spaces)
0.1818181818181818: 9 digits (rounded), 11 width

Ini menunjukkan interaksi antara medan ketepatan dan lebar serta cara sifar pendahuluan boleh menjejaskan pemformatan akhir.

Atas ialah kandungan terperinci Bagaimanakah fmt.Printf Mengendalikan Sifar Utama Apabila Menggunakan Lebar dan Ketepatan untuk Nilai 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