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

Barbara Streisand
Lepaskan: 2024-10-26 01:27:02
asal
310 orang telah melayarinya

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!