I have a struct like:
type Msg struct {
F1 *big.Float `json:"F1,string"`
}
Then I got a message in json
from a message queue and then I want to unmarshal that json message into my Msg
struct:
// jsonMsg = {"F1": "1000314.451234"}
var msg Msg
json.Unmarshal(jsonMsg, &msg)
But I got:
fmt.Println("go object:",msg.F1.String()) // 1000314.45, precision lost
So the precision is lost when my string "1000314.451234"
is unmarshaled to a Msg
object in golang. I wonder if this is bug? How can I get the full precision? Thanks.
The precision is not lost when you unmarshall. It's "lost" when you convert the Float to String to print it.
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)
}
The output of this test will be :
go object: 1000314.451
go object: 1000314.451234
So just depend how you print the data. Godoc fmt printing