Golang math/big Unmarshal 丢失的准确性

Golang math/big Unmarshal Lost Precision

我有一个像这样的结构:

type Msg struct {
    F1  *big.Float `json:"F1,string"`
}

然后我在 json 中从消息队列中收到一条消息,然后我想将该 json 消息解组到我的 Msg 结构中:

// jsonMsg = {"F1": "1000314.451234"}
var msg Msg
json.Unmarshal(jsonMsg, &msg)

但是我得到了:

fmt.Println("go object:",msg.F1.String()) // 1000314.45, precision lost

因此,当我的字符串 "1000314.451234" 在 golang 中解组为 Msg 对象时,精度会丢失。我想知道这是不是bug?我怎样才能得到完整的精度?谢谢。

解组时不会丢失精度。当你将 Float 转换为 String 进行打印时,它是 "lost"。

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 printing