【发布时间】:2017-01-31 06:05:39
【问题描述】:
在将 float32 数字转换为 float64 精度时,Go 中会丢失。例如,将 359.9 转换为 float64 会产生 359.8999938964844。如果 float32 可以精确存储,为什么 float64 会丢失精度?
示例代码:
package main
import (
"fmt"
)
func main() {
var a float32 = 359.9
fmt.Println(a)
fmt.Println(float64(a))
}
试试 Playground
【问题讨论】:
-
当我需要使用有理数时,这让我很不爽。转换为 float64 的额外精度“获得”给出了 int32 无法表示的不同分子和分母。具有讽刺意味的是,这奏效了:
strconv.ParseFloat(fmt.Sprint(f32var), 64)
标签: go floating-point precision