首页 > 后端开发 > Golang > 在 Go 中编组 JSON 时如何保持浮点精度?

在 Go 中编组 JSON 时如何保持浮点精度?

Susan Sarandon
发布: 2024-11-29 19:20:12
原创
968 人浏览过

How Can I Preserve Floating-Point Precision When Marshaling JSON in Go?

在 JSON 编组中保留浮点精度

在 Go 中, json.Marshal() 函数通常会从浮点数中删除尾随零在 JSON 序列化期间。如果使用应用程序需要原始值的完整精度,这可能会出现问题。

要解决此问题,请考虑定义封装浮点值的自定义数据类型。下面是一个示例:

type PreservedFloat float64

func (f PreservedFloat) MarshalJSON() ([]byte, error) {
    // Preserve trailing zeros in the JSON representation.
    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
}
登录后复制

在此实现中:

  • PreservedFloat 类型用作标准 float64 的包装器。
  • MarshalJSON 方法会覆盖默认值JSON 序列化行为。
  • 如果值具有整数表示形式(没有小数部分),它的格式设置为一位小数,以保留尾随零。
  • 否则,该值将在不指定精度的情况下进行格式化,从而使其保持完整的准确性。

通过使用 PreservedFloat ,您可以控制浮点值的 JSON 表示形式,确保它们即使在编组之后也能保持精度。

以上是在 Go 中编组 JSON 时如何保持浮点精度?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板