Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menukar Float64 Go kepada Rentetan Tetap Lebar, Angka Ketara?

Bagaimana untuk Menukar Float64 Go kepada Rentetan Tetap Lebar, Angka Ketara?

DDD
Lepaskan: 2024-12-05 16:34:11
asal
367 orang telah melayarinya

How to Convert Go's Float64 to Fixed-Width, Significant-Digit-Preserving Strings?

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)
}
Salin selepas log masuk

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))
}
Salin selepas log masuk

Output:

0.0000000000
0.1234567890
1234.5678901
123456789012
1.234568e+12
9405090880.5
9.405091e+19
9.40509e+119
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan