ホームページ >バックエンド開発 >Golang >Go でフロートを JSON にマーシャリングするときに末尾のゼロを保持するにはどうすればよいですか?

Go でフロートを JSON にマーシャリングするときに末尾のゼロを保持するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-28 08:21:12485ブラウズ

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

JSON マーシャルと浮動小数点数の末尾ゼロ

問題:

浮動小数点数を JSON にマーシャリングするときjson.Marshal() を使用すると、末尾のゼロが削除される可能性があります。外部プログラムで JSON を解析するときに問題が発生します。

解決策:

JSON 出力の末尾のゼロを保持するには、カスタム float 型とカスタム MarshalJSON() メソッドを提供します。

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
}

この中で実装:

  • KeepZero 型は float64 型をラップします。
  • MarshalJSON() メソッドは、float が整数 (小数部分なし) かどうかをチェックします。その場合、小数点以下 1 桁の精度で strconv.FormatFloat() 関数を使用して、末尾のゼロが確実に保持されるようにします。
  • それ以外の場合は、小数点以下の固定数の指定を避けるために、精度 -1 が使用されます。

例:

type Pt struct {
    Value KeepZero
    Unit  string
}

func main() {
    data, err := json.Marshal(Pt{40.0, "some_string"})
    fmt.Println(string(data), err)
}

この例では、目的の JSON 出力が生成されます:

{"Value":40.0,"Unit":"some_string"}

以上がGo でフロートを JSON にマーシャリングするときに末尾のゼロを保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。