将字符串转换为浮点型会失去精度吗?

时间:2019-01-13 12:53:06

标签: go

问题

string转换为float64时,float64的小数部分丢失大量数字。

代码

origVal := "0.00000628"
convVal, err := strconv.ParseFloat(origVal, 64)
if err == nil {
    fmt.Printf("Original value: %s\nConverted value: %f\n", origVal, convVal)
}

输出:

Original value: 0.00000628
Converted value: 0.000006

该代码可在Go Playground上找到:https://play.golang.org/p/a8fH_JGug7l

上下文

我正在从API中提取数据。该API将浮点数字符串化。我将这些字符串化的数字转换为浮点数,因为我想对它们进行一些基本的算术运算。
我对Go相当陌生,所以如果答案很简单,我会道歉。

1 个答案:

答案 0 :(得分:3)

问题不是字符串未正确转换,而是Printf在默认情况下确实不会输出完整的小数部分(如果很长)。 以下代码与原始代码打印相同,但小数点后有10个数字:

origVal := "0.00000628"
convVal, err := strconv.ParseFloat(origVal, 64)
if err == nil && err2 ==nil {
    fmt.Printf("Original value: %s\nConverted value: %.10f\n", origVal, convVal)
}

感谢@ usr2564301的快速回复!