Bagaimana untuk Mengekalkan Sifar Mengekori Apabila Marshaling Terapung dalam Go JSON?

Linda Hamilton
Lepaskan: 2024-11-24 06:12:10
asal
912 orang telah melayarinya

How to Preserve Trailing Zeros When Marshaling Floats in Go JSON?

Kekalkan Sifar Mengekor dalam Nombor Titik Terapung Terpelihara JSON

Dalam Go, fungsi json.Marshal() sering menanggalkan sifar tertinggal daripada terapung -nombor mata semasa marshalling. Ini boleh menyebabkan kehilangan ketepatan dalam senario tertentu.

Masalah:

Apabila menyusun nilai program Go dengan sifar tertinggal (cth., 40.0), json.Marshal () mengeluarkan nilai tanpa sifar (mis., 40). Tingkah laku ini boleh menjadi masalah jika program luaran menjangkakan nombor titik terapung dengan sifar mengekori.

Penyelesaian 1 (Disyorkan): Gunakan Jenis Terapung Tersuai

Tentukan terapung tersuai taip dan laksanakan kaedah MarshalJSON() untuk mengawal siri JSON. Berikut ialah contoh:

type KeepZero float64

func (f KeepZero) MarshalJSON() ([]byte, error) {
    if float64(f) == float64(int(f)) {
        return []byte(strconv.FormatFloat(float64(f), 'f', 1, 32)), nil
    }
    return []byte(strconv.FormatFloat(float64(f), 'f', -1, 32)), nil
}
Salin selepas log masuk

Dalam jenis tersuai ini, kaedah MarshalJSON() menukarkan apungan kepada rentetan dengan satu tempat perpuluhan (jika ia nombor bulat) atau mengekalkan semua tempat perpuluhan (jika ia bukan nombor bulat).

Contoh:

type Pt struct {
    Value KeepZero
    Unit  string
}

func main() {
    data, err := json.Marshal(Pt{Value: 40.0, Unit: "some_string"})
    fmt.Println(string(data), err)
}
Salin selepas log masuk

Kod ini output {"Value":40.0,"Unit":"some_string"} , mengekalkan sifar di belakang dalam output JSON.

Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Sifar Mengekori Apabila Marshaling Terapung dalam Go JSON?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan