我注意到 go unmarshals json floats 的方式有一些奇怪的行为。有些数字(但不是全部)拒绝正确解组。解决这个问题就像在目标变量中使用 float64 而不是 float32 一样简单,但我一生都找不到出现这种情况的充分理由。
这是演示该问题的代码:
package main
import (
"encoding/json"
"fmt"
. "github.com/shopspring/decimal"
)
func main() {
bytes, _ := json.Marshal(369.1368) // not every number is broken, but this one is
fmt.Println("bytes", string(bytes))
var f32 float32
json.Unmarshal(bytes, &f32)
fmt.Printf("f32 %f\n", f32) // adds an extra 0.00001 to the number
var d Decimal
json.Unmarshal(bytes, &d)
fmt.Printf("d %s\n", d) // 3rd party packages work
// naw, you can just float64
var f64 float64
json.Unmarshal(bytes, &f64)
fmt.Printf("f64 %f\n", f64) // float64 works
}
不需要 float64 来准确表示我的示例数字,那么为什么这里需要呢?
去游乐场链接:https://play.golang.org/p/tHkonQtZoCt
30秒到达战场
相关分类