按照所需格式将go转换为go lang中的字符串。

时间:2015-11-22 06:03:57

标签: string go floating-point typecast-operator

我在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 个答案:

答案 0 :(得分:3)

  

Package strconv

     

import“strconv”> func FormatFloat

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

FormatFloat将浮点数f转换为字符串,   根据格式fmt和precision prec。它使结果四舍五入   假设原始是从浮点值获得的   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'和'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

答案 1 :(得分:0)

其他一些选项:

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")
   }
}