我想將float64
的值格式化爲golang中的2位小數html/template
說index.html
文件。在.go
文件我可以格式,如:格式float在golang html /模板
strconv.FormatFloat(value, 'f', 2, 32)
但我不知道如何將它在模板格式。我正在使用gin-gonic/gin
框架的後端。任何幫助將不勝感激。謝謝。
我想將float64
的值格式化爲golang中的2位小數html/template
說index.html
文件。在.go
文件我可以格式,如:格式float在golang html /模板
strconv.FormatFloat(value, 'f', 2, 32)
但我不知道如何將它在模板格式。我正在使用gin-gonic/gin
框架的後端。任何幫助將不勝感激。謝謝。
你有很多選擇:
fmt.Sprintf()
然後將它傳遞給模板執行(n1
)String() string
方法,根據自己的喜好進行格式設置。這由模板引擎(n2
)檢查和使用。printf
並使用自定義格式字符串(n3
)。printf
,但這需要通過格式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
您可以註冊FuncMap
。
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})
}
已經有一個'printf'內置函數。看到我自己的答案。 – dolmen
使用printf
template built-in function與"%.2f" format
:
tmpl := template.Must(template.New("test").Parse(`The formatted value is = {{printf "%.2f" .}}`))
tmpl.Execute(os.Stdout, 123.456789)
與%.2f
格式的問題是,它不圓的,但截斷。
我已經開發了基於Int64的處理貨幣正在處理花車,字符串分析,JSON等
它存儲量美分的64位整數,小數類。可以很容易地從浮動創建或轉換回浮動。
方便存儲在數據庫中。
https://github.com/strongo/decimal
package example
import "github.com/strongo/decimal"
func Example() {
var amount decimal.Decimal64p2; print(amount) // 0
amount = decimal.NewDecimal64p2(0, 43); print(amount) // 0.43
amount = decimal.NewDecimal64p2(1, 43); print(amount) // 1.43
amount = decimal.NewDecimal64p2FromFloat64(23.100001); print(amount) // 23.10
amount, _ = decimal.ParseDecimal64p2("2.34"); print(amount) // 2.34
amount, _ = decimal.ParseDecimal64p2("-3.42"); print(amount) // -3.42
}
很適合我的債務,跟蹤器的應用程序https://debtstracker.io/
感謝您的幫助。但我怎樣才能在模板本身格式?有什麼方法可以格式化嗎?或者我也必須將自定義類型傳遞給模板和其他數據?請幫忙。 – Bhavana
@ user29請參閱'n4'情況:傳遞一個「純」數字類型的'float64'('3.1415'),並將其格式化爲tempalte:'{{printf「%.2f」.n4}}' 。 – icza
好的..非常感謝.. – Bhavana