浮点数输出中的“%!s”是什么?

时间:2016-05-15 18:37:22

标签: go

我将坐标(位置)作为2个float64数字的输出,它看起来像这样:

&{%!s(float64=42.539679) %!s(float64=42.601339)}

这是我第一次看到这样的东西,那么“%!s”是什么? “TypeOf”表示“%!s(float64 = 42.539679)”是float64。那么我该如何使用这种花车呢?有没有办法解析它,或以某种方式使%!s(float64 = 42.539679)看起来像42.539679?

UPD:突出显示的行是来自Syfaro电报bot api的* tgbotapi.Location对象。 api有这样的结构:

type Location struct {
    Longitude float64 `json:"longitude"`
    Latitude  float64 `json:"latitude"`
}

并且Location.Latitude给了我:“%!s(float64 = 42.539679)”(float64)(?)

2 个答案:

答案 0 :(得分:7)

我认为这是使用错误格式“动词”的问题。您需要使用%f代替%s

package main

import (
    "fmt"
)

func main() {
    var f float64 = 3.14
    fmt.Printf("attempting to print as string: %s \n", f)
    fmt.Printf("attempting to print as float: %f", f)
}

Runnable:https://play.golang.org/p/Pec_QrxBIl

答案 1 :(得分:6)

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

%!s 基本上用于错误,以帮助您识别问题。