首页 >后端开发 >Golang >如何在 Go HTML 模板中设置浮点数格式?

如何在 Go HTML 模板中设置浮点数格式?

DDD
DDD原创
2024-11-09 00:11:01910浏览

How to Format Floating-Point Numbers in Go HTML Templates?

在 Go HTML 模板中格式化浮点数

在 Go HTML 模板中,您可能需要格式化浮点值以进行显示。正如您所提到的,在 .go 文件中使用 strconv.FormatFloat 将 float64 转换为字符串非常简单。但是,这种方法不适合模板。

相反,您有多种选项可以在 HTML 模板中格式化浮动:

  • 选项 1: 填充之前模板,在 .go 文件中使用 fmt.Sprintf 格式化数字。
  • 选项 2: 创建自定义数据类型并实现 String() 方法以根据您的情况格式化浮点数
  • 选项3:直接在模板内调用fmt.Sprintf,指定自定义格式字符串。
  • 选项4:注册自定义模板中的函数可使用您首选的格式字符串来格式化浮动。

这是演示这些选项的示例代码片段:

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

// MyFloat is a custom type for formatting floats.
type MyFloat float64

// String implements the String() method for converting MyFloat to a string.
func (mf MyFloat) String() string {
    return fmt.Sprintf("%.2f", float64(mf))
}

func main() {
    t, err := template.New("").Funcs(template.FuncMap{
        // Register the MyFormat function to format floats using a custom format string.
        "MyFormat": func(f float64) string { return fmt.Sprintf("%.2f", f) },
    }).Parse(templ)
    if err != nil {
        panic(err)
    }

    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 {
        panic(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

以上是如何在 Go HTML 模板中设置浮点数格式?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn