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
我有一个像这样的结构:
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