我有一個(gè)像這樣的結(jié)構(gòu):type Msg struct { F1 *big.Float `json:"F1,string"`}然后我json從消息隊(duì)列中收到一條消息,然后我想將該 json 消息解組到我的Msg結(jié)構(gòu)中:// jsonMsg = {"F1": "1000314.451234"}var msg Msgjson.Unmarshal(jsonMsg, &msg)但我得到了:fmt.Println("go object:",msg.F1.String()) // 1000314.45, precision lost因此,當(dāng)我的字符串"1000314.451234"被解組為Msggolang 中的對(duì)象時(shí),精度會(huì)丟失。我想知道這是否是錯(cuò)誤?我怎樣才能獲得完整的精度?謝謝。
1 回答

繁花不似錦
TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
解組時(shí)不會(huì)丟失精度。當(dāng)您將 Float 轉(zhuǎn)換為 String 以打印它時(shí),它會(huì)“丟失”。
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)
}
此測(cè)試的輸出將是:
go object: 1000314.451
go object: 1000314.451234
所以只取決于你如何打印數(shù)據(jù)。Godoc fmt 打印
- 1 回答
- 0 關(guān)注
- 208 瀏覽
添加回答
舉報(bào)
0/150
提交
取消