Rumah >pembangunan bahagian belakang >Golang >Mengapakah `fmt.Printf` dengan `%g` dan Medan Lebar/Ketepatan Berkelakuan Tidak Dijangka?

Mengapakah `fmt.Printf` dengan `%g` dan Medan Lebar/Ketepatan Berkelakuan Tidak Dijangka?

Susan Sarandon
Susan Sarandonasal
2024-10-26 17:02:02363semak imbas

Why Does `fmt.Printf` with `%g` and Width/Precision Fields Behave Unexpectedly?

fmt.Printf dengan Width and Precision Fields dalam %g Berkelakuan Tidak Dijangka

Apabila cuba memformat terapung dengan lebar yang konsisten menggunakan fmt.Printf (), ia mungkin tidak berkelakuan seperti yang diharapkan apabila menggunakan penentu format %g dengan kedua-dua medan lebar dan ketepatan.

Menurut dokumentasi, medan ketepatan untuk %g menetapkan bilangan jumlah digit, tidak termasuk mana-mana pendahuluan sifar. Walau bagaimanapun, penentu format %g mempunyai beberapa gelagat unik yang boleh mengelirukan.

Sifar Utama dan Pengiraan Digit:

  • Sifar pendahuluan dalam bahagian pecahan ialah tidak dikira sebagai digit.
  • Sifar mengekor selepas digit bukan sifar dikira sebagai digit.

Contoh:

  • fmt .Printf("%.4g", 0.12345) memberikan 0.1235.
  • fmt.Printf("%.4g", 0.012345) memberikan 0.01235.
  • fmt.4grinf("%. , 0.0012345) memberikan 0.001234.

Ketepatan dan Lebar:

  • Medan lebar menentukan lebar minimum, termasuk sebarang
  • Jika bilangan digit melebihi lebar yang ditentukan, medan lebar akan diabaikan.

Kes Anda:

Dalam contoh anda, anda menggunakan .9g, yang menentukan lebar minimum 10 dan sejumlah 9 digit. Walau bagaimanapun, gelagat berikut berlaku:

    0.0606060606060606: Memerlukan 12 digit, jadi lebar minimum diabaikan.
  • 0.3333333333333333: Memerlukan 12 digit, jadi abaikan digit. >
  • 0.05 dan 0.4: Memerlukan 9 digit, yang kurang daripada lebar minimum, supaya ia berlapik dengan ruang.
  • 0.1818181818181818: Memerlukan 9 digit selepas pembundaran, jadi lebar minimum diabaikan.

Atas ialah kandungan terperinci Mengapakah `fmt.Printf` dengan `%g` dan Medan Lebar/Ketepatan Berkelakuan Tidak Dijangka?. 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