Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menukar Float64 kepada Rentetan Lebar Tetap dengan Digit Ketara Maksimum dalam Go?

Bagaimana untuk Menukar Float64 kepada Rentetan Lebar Tetap dengan Digit Ketara Maksimum dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-12-05 15:46:10849semak imbas

How to Convert Float64 to a Fixed-Width String with Maximum Significant Digits in Go?

Menukar Float64 kepada Rentetan dengan Lebar Tetap dan Digit Ketara Maksimum

Apabila membentangkan nombor titik terapung dalam jadual lebar tetap, kebimbangan timbul mengenai pemeliharaan digit bererti. Fungsi fmt.Printf standard menawarkan kawalan terhad ke atas aspek ini.

Penyelesaian: Pemformatan Tersuai

Untuk menangani isu ini, kami boleh melaksanakan fungsi pemformatan tersuai yang menentukan bilangan optimum digit bererti kepada muat dalam lebar yang ditentukan. Ini melibatkan menganalisis nombor yang dipersoalkan dan memilih antara notasi saintifik dan bentuk biasa berdasarkannya magnitud.

Pelaksanaan:

// format12 formats x to be 12 chars long.
func format12(x float64) string {
    if x >= 1e12 {
        // For scientific notation, determine the width of the exponent.
        s := fmt.Sprintf("%.g", x)
        format := fmt.Sprintf("%%12.%dg", 12-len(s))
        return fmt.Sprintf(format, x)
    }

    // For regular form, determine the width of the fraction.
    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)
}

Ujian:

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 kepada Rentetan Lebar Tetap dengan Digit Ketara Maksimum dalam Go?. 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