我在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 :)
答案 0 :(得分:3)
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")
}
}