Menukar Nombor Titik Terapung kepada Lebar Tetap, Rentetan Pemeliharaan Digit Ketara
Soalan:
Adakah terdapat fungsi perpustakaan standard dalam Go yang menukar titik terapung nombor (float64) kepada rentetan dengan lebar tetap, mengekalkan bilangan maksimum digit bererti?
Jawapan:
Walaupun perpustakaan standard Go tidak menyediakan fungsi khusus untuk tujuan ini, penyelesaian tersuai boleh dilaksanakan untuk mencapai pemformatan yang dikehendaki.
Pendekatan melibatkan percabangan berdasarkan nilai nombor float64. Untuk nombor yang lebih besar daripada atau sama dengan 1e12, format notasi saintifik digunakan. Untuk nombor kurang daripada 1e12, format biasa digunakan.
Dalam kedua-dua kes, pemformatan awal dilakukan untuk menentukan bilangan digit pecahan yang diperlukan untuk dimuatkan ke dalam lebar 12 aksara yang dikehendaki. Rentetan format akhir kemudiannya dibina menggunakan ketepatan yang dikira.
Coretan Kod:
// format12 formats x to be 12 chars long. func format12(x float64) string { if x >= 1e12 { // Check to see how many fraction digits fit in: s := fmt.Sprintf("%.g", x) format := fmt.Sprintf("%%12.%dg", 12-len(s)) return fmt.Sprintf(format, x) } // Check to see how many fraction digits fit in: s := fmt.Sprintf("%.0f", x) if len(s) == 12 { return s } format := fmt.Sprintf("%%%d.%df", len(s), 12-len(s)-1) return fmt.Sprintf(format, x) }
Kes Ujian dan Output:
fs := []float64{0, 1234.567890123, 0.1234567890123, 123456789012.0, 1234567890123.0, 9.405090880450127e+9, 9.405090880450127e+19, 9.405090880450127e+119} for _, f := range fs { fmt.Println(format12(f)) }
Output:
0.0000000000 0.1234567890 1234.5678901 123456789012 1.234568e+12 9405090880.5 9.405091e+19 9.40509e+119
Atas ialah kandungan terperinci Bagaimana untuk Menukar Float64 Go kepada Rentetan Tetap Lebar, Angka Ketara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!