首頁  >  文章  >  後端開發  >  當 Go JSON 中的編組浮動時如何保留尾隨零?

當 Go JSON 中的編組浮動時如何保留尾隨零?

Linda Hamilton
Linda Hamilton原創
2024-11-24 06:12:10915瀏覽

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

在JSON 編組浮點數中保留尾隨零

在Go 中,json.Marshal() 函數經常從浮點數中刪除尾隨零-編組期間的點數。在某些情況下,這可能會導致精度損失。

問題:

當用尾隨零(例如40.0)編組Go 程式的值時,json.Marshal () 輸出不帶零的值(例如40) 。如果外部程式需要尾隨零的浮點數,此行為可能會出現問題。

解決方案 1(建議):使用自訂浮點類型

定義自訂浮點鍵入並實作 MarshalJSON() 方法來控制 JSON 序列化。以下是一個範例:

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
}

在此自訂類型中,MarshalJSON() 方法將浮點數轉換為具有一位小數的字串(如果它是整數)或保留所有小數位(如果它不是整數)所有的number)。

範例:

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)
}

此程式碼輸出{"Value":40.0,"Unit":"some_string"} ,保留JSON 輸出中的尾隨零。

以上是當 Go JSON 中的編組浮動時如何保留尾隨零?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn