duanbipu7601 2019-01-13 12:53
浏览 330

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

Problem

When converting a string to a float64, the fractional part of the float64 loses a significant amount of numbers.

Code

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

Outputs:

Original value: 0.00000628
Converted value: 0.000006

The code is available on the Go Playground: https://play.golang.org/p/a8fH_JGug7l

Context

I am pulling data from an API. This API stringifies floating point numbers. I convert these stringified numbers to floats because I want to do some basic arithmetics on them.
I am fairly new to Go, so my apologies if the answer is straightforward.

  • 写回答

1条回答 默认 最新

  • douqufan9148 2019-01-13 13:21
    关注

    The problem was not that the string was not correctly converted, but that Printf does, by default, not output the complete fractional part if it is long. The following code prints the same as the original code but with 10 numbers after the decimal point:

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

    Thanks to @usr2564301 for the quick reply!

    评论

报告相同问题?

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加