首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格式浮动在golang html/template中

格式浮动在golang html/template中
EN

Stack Overflow用户
提问于 2016-12-15 08:23:53
回答 3查看 20.1K关注 0票数 19

我想将float64值格式化为2小数位,在html/template中,例如在index.html文件中。在.go文件中,我可以格式化如下:

代码语言:javascript
复制
strconv.FormatFloat(value, 'f', 2, 32)

但我不知道如何用模板格式化它。我在后端使用gin-gonic/gin框架。任何帮助都将不胜感激。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-15 08:39:49

你有很多选择:

  • 您可以决定格式化数字,例如在将数字传递给模板执行( fmt.Sprintf() )之前使用n1
  • 或者,您可以在定义String() string方法的地方创建自己的类型,按自己的喜好格式化。这是由模板引擎(n2)检查和使用的。
  • 您还可以从模板直接和显式地调用printf,并使用自定义格式字符串(n3)。
  • 尽管您可以直接调用printf,但这需要传递string格式。如果您不想每次都这样做,可以注册一个自定义函数(n4)。

参见此示例:

代码语言:javascript
复制
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}}`

输出(在围棋游乐场上尝试):

代码语言:javascript
复制
Number:         n0 = 3.1415
Formatted:      n1 = 3.14
Custom type:    n2 = 3.14
Calling printf: n3 = 3.14
MyFormat:       n4 = 3.14
票数 34
EN

Stack Overflow用户

发布于 2017-02-01 13:41:39

printf 模板内建函数"%.2f" format一起使用

代码语言:javascript
复制
tmpl := template.Must(template.New("test").Parse(`The formatted value is = {{printf "%.2f" .}}`))

tmpl.Execute(os.Stdout, 123.456789)

围棋

票数 15
EN

Stack Overflow用户

发布于 2016-12-15 08:47:37

您可以注册一个FuncMap

代码语言:javascript
复制
package main

import (
    "fmt"
    "os"
    "text/template"
)

type Tpl struct {
    Value float64
}

func main() {
    funcMap := template.FuncMap{
        "FormatNumber": func(value float64) string {
            return fmt.Sprintf("%.2f", value)
        },
    }

    tmpl, _ := template.New("test").Funcs(funcMap).Parse(string("The formatted value is = {{ .Value | FormatNumber  }}"))

    tmpl.Execute(os.Stdout, Tpl{Value: 123.45678})
}

游乐场

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41159492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档