我有一个像这样的结构: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 打印
- 1 回答
- 0 关注
- 193 浏览
添加回答
举报
0/150
提交
取消