Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Medan Ketepatan Sebenarnya Berfungsi dengan `%g` dalam `fmt.Printf`?

Bagaimanakah Medan Ketepatan Sebenarnya Berfungsi dengan `%g` dalam `fmt.Printf`?

Barbara Streisand
Barbara Streisandasal
2024-10-26 01:27:02301semak imbas

How Does the Precision Field Actually Work with `%g` in `fmt.Printf`?

Gelagat Tidak Dijangka bagi fmt.Printf dengan Medan Lebar dan Ketepatan untuk %g

Memahami Dokumentasi Samar-samar

Dokumentasi untuk medan format fmt.Printf untuk nilai titik terapung menyatakan bahawa:

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

Bahagian yang mengelirukan terletak pada penggunaan "ia" dalam ayat terakhir. Ia sebenarnya merujuk kepada "ketepatan", bukan "lebar."

Gelagat Sebenar %.9g

Bertentangan dengan gerak hati bahawa %.9g harus menghasilkan sejumlah 9 digit bererti, ia sebenarnya hanya mempertimbangkan digit selepas titik perpuluhan.

Sebagai contoh, 123456.789 akan diformatkan sebagai 123.4e 03 kerana %.9g berkesan memotong mana-mana sifar pendahuluan.

Sebaliknya, 0.0000032345 akan diformatkan sebagai 451. e-06 kerana %.9g mengambil kira semua digit bererti selepas titik perpuluhan.

Kesan lebar dan ketepatan

Medan lebar menentukan lebar minimum bagi keseluruhan rentetan yang diformatkan, termasuk perpuluhan titik dan eksponen (jika ada).

Medan ketepatan, seperti yang diterangkan di atas, menetapkan bilangan digit bererti selepas titik perpuluhan.

Untuk %g, medan ketepatan mengatasi medan lebar . Walau bagaimanapun, jika rentetan yang diformatkan melebihi lebar yang ditentukan, ia akan melangkaui lebar yang ditentukan.

Penjelasan Contoh Diberi

Ingat bahawa contoh melibatkan pemformatan nilai titik terapung berikut menggunakan .9g:

  • 0.0606060606060606
  • 0.3333333333333333
  • 0.05
  • 0.05
  • 0.05
  • 0.48 1818
  • 0.0606060606060606: ketepatan 9 memotong sifar pendahuluan, menghasilkan 0.0606060606, yang muat dalam lebar 10.
  • 0.3333333333333333: Sama seperti contoh pertama, rentetan 0.33333333 yang terhasil dalam 0.333333333
  • >0.05: Dengan hanya 2 digit bererti, 0.05 berlapik dengan ruang untuk memenuhi lebar minimum 10.
  • 0.4: Sama seperti 0.05, 0.4 juga berlapik untuk memenuhi lebar minimum 10.
0.1818181818181818: Ketepatan 9 menghasilkan 0.181818182 dengan jejak 2 dibundarkan ke atas. Rentetan ini muat dalam lebar 10.

Atas ialah kandungan terperinci Bagaimanakah Medan Ketepatan Sebenarnya Berfungsi dengan `%g` dalam `fmt.Printf`?. 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