在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"}
以上是當 Go JSON 中的編組浮動時如何保留尾隨零?的詳細內容。更多資訊請關注PHP中文網其他相關文章!