2016-12-15 68 views
8

我想將float64的值格式化爲golang中的2位小數html/templateindex.html文件。在.go文件我可以格式,如:格式float在golang html /模板

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

但我不知道如何將它在模板格式。我正在使用gin-gonic/gin框架的後端。任何幫助將不勝感激。謝謝。

回答

12

你有很多選擇:

  • 您可以決定例如格式化數字使用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 
+0

感謝您的幫助。但我怎樣才能在模板本身格式?有什麼方法可以格式化嗎?或者我也必須將自定義類型傳遞給模板和其他數據?請幫忙。 – Bhavana

+0

@ user29請參閱'n4'情況:傳遞一個「純」數字類型的'float64'('3.1415'),並將其格式化爲tempalte:'{{printf「%.2f」.n4}}' 。 – icza

+0

好的..非常感謝.. – Bhavana

2

您可以註冊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}) 
} 

Playground

+0

已經有一個'printf'內置函數。看到我自己的答案。 – dolmen

-1

%.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/