2016-12-15 19 views
8

ゴールデンのfloat64の値を2小数点以下の桁数に設定したいhtml/template say index.htmlファイル。 .goファイルで、私は次のようにフォーマットすることができます:golangのフォーマットfloat html/template

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

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

答えて

12

あなたは多くのオプションがあります。

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

    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上でそれを試してみてください):あなたはこのたびをしたくない場合は、単にその(n4

は、この例を参照してくださいやってカスタム関数を登録することができます。

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

Okay ..ありがとう..ありがとうございました。 – 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

2

"%.2f" formatprintftemplate built-in functionを使用します。

tmpl := template.Must(template.New("test").Parse(`The formatted value is = {{printf "%.2f" .}}`)) 

tmpl.Execute(os.Stdout, 123.456789) 

Go Playgroung

-1

%.2fフォーマットの問題は、それがラウンドが、切り捨てないということです。

私は山車、文字列解析、JSONなど

それはセントの64ビット整数として量を格納を処理しているお金を処理するためのint64型に基づいて、小数点クラスを開発しました。 floatから簡単に作成することも、floatに変換することも簡単です。

DBにも格納するのに便利です。助けのための私の債務トラッカーアプリのためだけでなく

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/