首页 > 后端开发 > Golang > 正文

当 Go JSON 中的编组浮动时如何保留尾随零?

Linda Hamilton
发布: 2024-11-24 06:12:10
原创
912 人浏览过

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中文网其他相关文章!

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