17

ファイルで言うfloat64golangで値を小数点以下2桁にフォーマットしたい。ファイルでは、次のようにフォーマットできます。html/templateindex.html.go

strconv.FormatFloat(value, 'f', 2, 32)

しかし、テンプレートでフォーマットする方法がわかりません。gin-gonic/ginバックエンドにフレームワークを使用しています。どんな助けでも大歓迎です。ありがとう。

4

4 に答える 4

31

多くのオプションがあります:

  • fmt.Sprintf()テンプレートの実行に渡す前に、たとえば を使用して数値をフォーマットすることができます( n1)
  • または、String() stringメソッドを定義する独自のタイプを作成し、好みに合わせてフォーマットすることもできます。これは、テンプレート エンジン ( n2) によってチェックされ、使用されます。
  • printfテンプレートから直接かつ明示的に呼び出し、カスタム フォーマット文字列 ( n3) を使用することもできます。
  • 直接呼び出すこともできますがprintf、これには format を渡す必要がありますstring。毎回これを行いたくない場合は、それを行うカスタム関数を登録できます ( n4)

次の例を参照してください。

type MyFloat float64

func (mf MyFloat) String() string {
    return fmt.Sprintf("%.2f", float64(mf))
}

func main() {
    t := template.Must(template.New("").Funcs(template.FuncMap{
        "MyFormat": func(f float64) string { return fmt.Sprintf("%.2f", f) },
    }).Parse(templ))
    m := map[string]interface{}{
        "n0": 3.1415,
        "n1": fmt.Sprintf("%.2f", 3.1415),
        "n2": MyFloat(3.1415),
        "n3": 3.1415,
        "n4": 3.1415,
    }
    if err := t.Execute(os.Stdout, m); err != nil {
        fmt.Println(err)
    }
}

const templ = `
Number:         n0 = {{.n0}}
Formatted:      n1 = {{.n1}}
Custom type:    n2 = {{.n2}}
Calling printf: n3 = {{printf "%.2f" .n3}}
MyFormat:       n4 = {{MyFormat .n4}}`

出力 ( Go Playgroundで試してください):

Number:         n0 = 3.1415
Formatted:      n1 = 3.14
Custom type:    n2 = 3.14
Calling printf: n3 = 3.14
MyFormat:       n4 = 3.14
于 2016-12-15T08:39:49.137 に答える