从 []bytes 解析浮点值的最佳方法是什么?
What's the best way to parse a float value from []bytes?
我有一个函数可以简单地用 ioutil.ReadFile()
读取一个文件。返回的类型是 []byte
,尽管值本身可以表示为浮点数。
我正在以这种方式转换 []byte
(其中 value
是从读取文件的函数返回的 []byte
):
var floatValue float64
fmt.Fscanf(bytes.NewReader(value), "%f", &floatValue)
这真的是从 []byte
extract/parse 一个有效浮点值的唯一方法吗?有一个类似的 discussion,但看起来它并没有真正去到任何地方。
为此您可以轻松使用 strconv.ParseFloat
,只需先将 []byte
转换为字符串即可。与创建 reader 并使用类似 scanf
的函数进行扫描相比,这肯定会有更少的开销。
sb := []byte("3.1415")
s := string(sb)
f, err := strconv.ParseFloat(s, 64)
if err != nil {
panic("whoops!")
}
fmt.Printf("%f\n", f)
输出:
3.141500
我有一个函数可以简单地用 ioutil.ReadFile()
读取一个文件。返回的类型是 []byte
,尽管值本身可以表示为浮点数。
我正在以这种方式转换 []byte
(其中 value
是从读取文件的函数返回的 []byte
):
var floatValue float64
fmt.Fscanf(bytes.NewReader(value), "%f", &floatValue)
这真的是从 []byte
extract/parse 一个有效浮点值的唯一方法吗?有一个类似的 discussion,但看起来它并没有真正去到任何地方。
为此您可以轻松使用 strconv.ParseFloat
,只需先将 []byte
转换为字符串即可。与创建 reader 并使用类似 scanf
的函数进行扫描相比,这肯定会有更少的开销。
sb := []byte("3.1415")
s := string(sb)
f, err := strconv.ParseFloat(s, 64)
if err != nil {
panic("whoops!")
}
fmt.Printf("%f\n", f)
输出:
3.141500