为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 数学/大 Unmarshal 丢失精度

Golang 数学/大 Unmarshal 丢失精度

Go
慕勒3428872 2022-01-10 10:19:39
我有一个像这样的结构:type Msg struct {    F1  *big.Float `json:"F1,string"`}然后我json从消息队列中收到一条消息,然后我想将该 json 消息解组到我的Msg结构中:// jsonMsg = {"F1": "1000314.451234"}var msg Msgjson.Unmarshal(jsonMsg, &msg)但我得到了:fmt.Println("go object:",msg.F1.String()) // 1000314.45, precision lost因此,当我的字符串"1000314.451234"被解组为Msggolang 中的对象时,精度会丢失。我想知道这是否是错误?我怎样才能获得完整的精度?谢谢。
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

解组时不会丢失精度。当您将 Float 转换为 String 以打印它时,它会“丢失”。


package main


import (

    "fmt"

    "encoding/json"

    "math/big"

)


type Msg struct {

    F1  *big.Float `json:"F1,string"`

}


func main() {

    jsonMsg := []byte(`{"F1": "1000314.451234"}`)

    var msg Msg

    json.Unmarshal(jsonMsg, &msg)

    fmt.Println("go object:",msg.F1.String())

    fmt.Printf("go object: %f", msg.F1)

}

此测试的输出将是:


go object: 1000314.451

go object: 1000314.451234

所以只取决于你如何打印数据。Godoc fmt 打印


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信