fna*_*gwp 5 string floating-point go typecast-operator
我在 go 中有 4 个浮点值(startLat,startLon,endLat,endLon)。我想将这些值附加(替换)到下面的字符串中:
var etaString = []byte(`{"start_latitude":"` + startLat + `","start_longitude":"` + startLon + `","end_latitude":"` + endLat + `","end_longitude":"` + endLon }`)
Run Code Online (Sandbox Code Playgroud)
在这样做之前,我必须将它们类型转换为字符串。
startLat := strconv.FormatFloat(o.Coordinate.Longitude, 'g', 1, 64)
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我得到这些参数的值,"4e+01 -1e+02 4e+01 -1e+02"
但我只想要这样的东西: "64.2345" 。
我怎样才能做到这一点?TIA :)
导入“strconv”> func FormatFloat
Run Code Online (Sandbox Code Playgroud)func FormatFloat(f float64, fmt byte, prec, bitSize int) stringFormatFloat 根据格式 fmt 和 precision prec 将浮点数 f 转换为字符串。假设原始数据是从 bitSize 位的浮点值(32 表示 float32,64 表示 float64)中获得的,它会舍入结果。
格式 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)
}
Run Code Online (Sandbox Code Playgroud)
输出:
6e+01
64.2345
Run Code Online (Sandbox Code Playgroud)