末尾のゼロを使用せずに、整数部分全体と小数部分の小数点以下2桁までの浮動小数点数を表示したいと思います。
http://play.golang.org/p/mAdQl6erWX :
// Desired output:
// "1.9"
// "10.9"
// "100.9"
fmt.Println("2g:")
fmt.Println(fmt.Sprintf("%.2g", 1.900)) // outputs "1.9"
fmt.Println(fmt.Sprintf("%.2g", 10.900)) // outputs "11"
fmt.Println(fmt.Sprintf("%.2g", 100.900)) // outputs "1e+02"
fmt.Println("\n2f:")
fmt.Println(fmt.Sprintf("%.2f", 1.900)) // outputs "1.90"
fmt.Println(fmt.Sprintf("%.2f", 10.900)) // outputs "10.90"
fmt.Println(fmt.Sprintf("%.2f", 100.900)) // outputs "100.90"
2g
を使用してフォーマットすると、整数が桁違いに増加すると丸めが開始されるという問題があります。また、e
で数字が表示されることもあります。
2f
でフォーマットすると、末尾のゼロが表示されるという問題があります。末尾のゼロを削除する後処理関数を作成することもできますが、これはSprintf
を使用して行います。
これは、Sprintf
を使用して一般的な方法で実行できますか?
そうでない場合、これを行うための良い方法は何ですか?
strconv.FormatFloat(10.900, 'f', -1, 64)
これにより、10.9
。
-1
3番目のパラメーターは、フロートを正確に表すために必要な最小桁数を出力するように関数に指示します。
ここを参照してください: https://golang.org/pkg/strconv/#FormatFloat
Sprintf
についてはわかりませんが、機能させるためです。最初に右にトリミングしてください0
そして.
。
fmt.Println(strings.TrimRight(strings.TrimRight(fmt.Sprintf("%.2f", 100.900), "0"), ".")) // 100.9
fmt.Println(strings.TrimRight(strings.TrimRight(fmt.Sprintf("%.2f", 100.0), "0"), ".")) // 100
私は同じことを達成するために以下の関数を使用しました:
//return 45.00 with "45" or 45.50 with "45.5"
func betterFormat(num float32) string {
s := fmt.Sprintf("%.4f", num)
return strings.TrimRight(strings.TrimRight(s, "0"), ".")
}