【问题标题】:Convert float to string in go lang as per the required format .根据所需的格式将浮点数转换为 go lang 中的字符串。
【发布时间】:2016-02-24 10:38:42
【问题描述】:

我在 go 中有 4 个浮点值(startLat、startLon、endLat、endLon)。我想将这些值附加(替换)到以下字符串:

var etaString = []byte(`{"start_latitude":"` + startLat + `","start_longitude":"` + startLon + `","end_latitude":"` + endLat + `","end_longitude":"` + endLon }`)

在这样做之前,我必须将它们类型转换为字符串。

startLat := strconv.FormatFloat(o.Coordinate.Longitude, 'g', 1, 64)

但是,当我这样做时,我将这些参数的值作为"4e+01 -1e+02 4e+01 -1e+02" 但我只想要这样的东西:“64.2345”。

我怎样才能做到这一点? TIA :)

【问题讨论】:

标签: string go floating-point typecast-operator


【解决方案1】:

Package strconv

导入 "strconv" > func FormatFloat

func FormatFloat(f float64, fmt byte, prec, bitSize int) string

FormatFloat 将浮点数 f 转换为字符串, 根据格式 fmt 和精度 prec。它对结果进行四舍五入 假设原始值是从浮点值获得的 bitSize 位(float32 为 32,float64 为 64)。

格式 fmt 是“b”(-ddddp±ddd,二进制指数)、“e”之一 (-d.dddde±dd,十进制指数),'E'(-d.ddddE±dd,十进制 exponent), 'f' (-ddd.dddd, no exponent), 'g' ('e' for large exponents, 'f' 否则),或 'G'('E' 表示大指数,'f' 否则)。

precision prec 控制位数(不包括 exponent) 以 'e'、'E'、'f'、'g' 和 'G' 格式打印。前面', 'E'和'f'是小数点后的位数。为了 'g' 和 'G' 它是总位数。特殊精度-1 使用所需的最少位数,以便 ParseFloat 将 准确返回 f。

使用-1 的精度,而不是1。使用f 的格式,而不是g 以避免大指数的指数形式(参见HectorJ's 注释)。

startLat := strconv.FormatFloat(o.Coordinate.Longitude, 'f', -1, 64)

例如,

package main

import (
    "fmt"
    "strconv"
)

func main() {
    f := 64.2345
    s := strconv.FormatFloat(f, 'g', 1, 64)
    fmt.Println(s)
    s = strconv.FormatFloat(f, 'f', -1, 64)
    fmt.Println(s)
}

输出:

6e+01
64.2345

【讨论】:

  • 如果你想确保永远不会得到指数,也可以使用 'f' 标志而不是 'g'
【解决方案2】:

其他一些选项:

package main
import "fmt"

func main() {
   n := 64.2345
   { // example 1
      s := fmt.Sprint(n)
      fmt.Println(s == "64.2345")
   }
   { // example 2
      s := fmt.Sprintf("%v", n)
      fmt.Println(s == "64.2345")
   }
   { // example 3
      s := fmt.Sprintf("%g", n)
      fmt.Println(s == "64.2345")
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2011-11-25
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 2013-09-27
    相关资源
    最近更新 更多