我有一个结构:
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
对象时,精度会丢失。我想知道这是不是错误?我怎样才能获得完整的精度?感谢。
答案 0 :(得分:3)
解组时精度不会丢失。将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 printing