20

Go を使用して、浮動小数点数を文字列にフォーマットする「最良の」方法を見つけようとしています。例を探しましたが、質問に具体的に答えるものは見つかりません。私がやりたいのは、浮動小数点数を文字列にフォーマットする「最良の」方法を使用することだけです。小数点以下の桁数は異なる場合がありますが、既知です (例: 2 または 4 または 0)。私が達成したいことの例を以下に示します。

以下の例に基づいて、fmt.Sprintf()またはstrconv.FormatFloat()または何か他のものを使用する必要がありますか?

そして、それぞれの通常の使用法とそれぞれの違いは何ですか?

また、現在 32 を使用している以下で 32 または 64 を使用することの重要性も理解していません。

strconv.FormatFloat(float64(fResult), 'f', 2, 32)

例:

package main

import (
    "fmt"
    "strconv"
)

func main() {

    var (
        fAmt1 float32 = 999.99
        fAmt2 float32 = 222.22
    )

    var fResult float32 = float32(int32(fAmt1*100) + int32(fAmt2*100)) / 100

    var sResult1 string = fmt.Sprintf("%.2f", fResult)

    println("Sprintf value = " + sResult1)

    var sResult2 string = strconv.FormatFloat(float64(fResult), 'f', 2, 32)

    println("FormatFloat value = " + sResult2)

}
4

2 に答える 2

21

と は両方ともfmt.Sprintfstrconv.FormatFloat内部で同じ文字列フォーマット ルーチンを使用しているため、同じ結果が得られるはずです。

数値をフォーマットする精度が可変の場合、 を使用する場合FormatFloatのようにフォーマット文字列を作成する必要がないため、おそらく を使用する方が簡単ですSprintf。変わらない場合は、どちらでも使用できます。

への最後の引数FormatFloatは、値を丸める方法を制御します。ドキュメントから:

元が bitSize ビット (float32 の場合は 32、float64 の場合は 64) の浮動小数点値から取得されたと仮定して、結果を丸めます。

したがってfloat32、サンプル コードのように値を操作している場合は、渡すこと32は正しいです。

于 2013-09-23T03:49:27.877 に答える