为了账号安全,请及时绑定邮箱和手机立即绑定

根据所需格式在 go lang 中将 float 转换为 string。

根据所需格式在 go lang 中将 float 转换为 string。

Go
饮歌长啸 2021-11-22 18:36:38
我在 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 :)
查看完整描述

2 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

包 strconv


导入“strconv”> func FormatFloat


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

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


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


精度 prec 控制由 'e'、'E'、'f'、'g' 和 'G' 格式打印的位数(不包括指数)。对于“e”、“E”和“f”,它是小数点后的位数。对于“g”和“G”,它是总位数。特殊精度 -1 使用所需的最小位数,以便 ParseFloat 将准确返回 f。


使用的精确度-1,不是1。使用 , 的格式f,不要g避免大指数的指数形式(请参阅HectorJ 的评论)。


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


查看完整回答
反对 回复 2021-11-22
?
拉风的咖菲猫

TA贡献1995条经验 获得超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")

   }

}

https://golang.org/pkg/fmt#Sprint

https://golang.org/pkg/fmt#Sprintf


查看完整回答
反对 回复 2021-11-22
  • 2 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信