JSON unmarshal float类型怎么保持JSON一样的数据

有如下的JSON数据:


{
"a": 0.000,
"b": 0.000
}

实际上经过JSON.Unmarshal之后我们输出的话会变成0.如果保持一模一样的保留三位数?


type Record map[string]interface{}

func main() {
var record Record
err := json.Unmarshal([]byte(d), &record)
if err != nil {
fmt.Println("json.Unmarshal:", err)
return
}
fmt.Println(record)
}
已邀请:

lrita

赞同来自: RedMothball

package main

import (
"encoding/json"
"fmt"
"strings"
)

type Record struct {
A json.Number `json:"a"`
B json.Number `json:"b"`
}

func main() {
var (
data = `{ "a": 0.000, "b": 0.000 }`
record Record
)

dec := json.NewDecoder(strings.NewReader(data))
dec.UseNumber()

if err := dec.Decode(&record); err != nil {
fmt.Println(err)
return
}
fmt.Printf("a(%s) b(%s)\n", record.A, record.B)
_, _ = record.A.Float64() // assign
}

songtianyi

赞同来自:

和C一样


package main

import (
"fmt"
)

func main() {
f1 := float64(0)
f2 := float64(0.000)
f3 := float64(0.00)
fmt.Printf("%0.3f\n", f1)
fmt.Printf("%0.3f\n", f2)
fmt.Printf("%0.3f\n", f3)
}

afocus

赞同来自:

type Record map[string]interface{}

var jsonstr = `
{
"a": 0.000,
"b": 0.000
}
`

func main() {
var record Record
dec := json.NewDecoder(strings.NewReader(jsonstr))
dec.UseNumber()
dec.Decode(&record)
fmt.Println(record)
}

要回复问题请先登录注册