Mencetak Nombor Float64 dengan Lebar Tetap dan Digit Ketara
Bayangkan anda perlu mencetak nombor float64 dalam jadual dengan lebar tetap 12 aksara dan bilangan maksimum yang mungkin bagi digit bererti. Pertimbangkan contoh berikut:
fmt.Printf("%12.6g\n", 9.405090880450127e+119) //"9.40509e+119" fmt.Printf("%12.6g\n", 0.1234567890123) //" 0.123457" fmt.Printf("%12.6g\n", 123456789012.0) //" 1.23457e+11"
Seperti yang anda lihat, fungsi fmt.Printf lalai dengan penentu format .6g mungkin sama ada memotong digit bererti atau menggunakan tatatanda saintifik, mengakibatkan kehilangan ketepatan. Adakah terdapat cara untuk mencapai pemformatan yang diingini menggunakan fungsi perpustakaan standard?
Pemformatan Tersuai untuk Penyelamat
Tiada fungsi perpustakaan standard mudah yang betul-betul memenuhi keperluan kami. Walau bagaimanapun, kami boleh membangunkan fungsi pemformatan tersuai yang mengambil kira lebar yang diingini dan digit bererti maksimum. Begini cara kita mendekati perkara ini:
Berikut ialah contoh pelaksanaan dalam Pergi:
import ( "fmt" ) func format12(x float64) string { if x >= 1e12 { exp := fmt.Sprintf("%.g", x) return fmt.Sprintf("%%12.%dg", 12-len(exp)) } s := fmt.Sprintf("%.0f", x) if len(s) == 12 { return s } return fmt.Sprintf("%%%d.%df", len(s), 12-len(s)-1) }
Menguji fungsi ini dengan pelbagai nilai float64 menghasilkan output berikut:
0.0000000000 0.1234567890 1234.5678901 123456789012 1.234568e+12 9405090880.5 9.405091e+19 9.40509e+119
Ini menunjukkan cara mencetak nombor float64 dalam lebar tetap dengan bilangan maksimum yang mungkin ketara digit menggunakan pemformatan tersuai.
Atas ialah kandungan terperinci Bagaimana untuk Mencetak Nombor Float64 dalam Go dengan Lebar Tetap dan Digit Ketara Maksimum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!