猿问

Golang 数学/大 Unmarshal 丢失精度

我有一个像这样的结构:


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"被解组为Msggolang 中的对象时,精度会丢失。我想知道这是否是错误?我怎样才能获得完整的精度?谢谢。


慕勒3428872
浏览 194回答 1
1回答

繁花不似锦

解组时不会丢失精度。当您将 Float 转换为 String 以打印它时,它会“丢失”。package mainimport (    "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.451go object: 1000314.451234所以只取决于你如何打印数据。Godoc fmt 打印
随时随地看视频慕课网APP

相关分类

Go
我要回答