乱数発生器に小数点の後にいくつの数値を生成するかを指定できるかどうか疑問に思っていましたか?
デフォルトの動作の例:
fmt.Println(rand.float64())
番号0.6046602879796196を出力します
望ましい動作:
fmt.Println(rand.float64(4))
次に、数値 0.6047 を出力します。
この機能は GO に既に存在しますか、それとも自分で実装する必要がありますか?
ありがとうございました!
私はそのような機能を知りませんが、自分で簡単に実装できます ( play ):
// Truncate the number x to n decimal places
//
// +- Inf -> +- Inf; NaN -> NaN
func truncate(x float64, n int) float64 {
return math.Trunc(x * math.Pow(10, float64(n))) * math.Pow(10, -float64(n))
}
number のn
小数点以下の桁数を左にシフトし、小数点以下の桁数を切り捨て、number の桁数n
を右にシフトします。
番号をユーザーに提示したい場合は、ある時点で番号を文字列に変換します。その場合は、このメソッドを使用せず、代わりにTysonが指摘する文字列の書式設定を使用してください。たとえば、浮動小数点数は不正確であるため、丸め誤差が発生する可能性があります。
truncate(0.9405090880450124,3) // 0.9400000000000001
あなたにとって重要なのは文字列表現だけのように思えますが、 fmt パッケージはそれを提供します:
fmt.Printf("%1.4f", rand.Float64())
そうです、小数点以下の桁数を指定するには、この呼び出しをラップする必要があります。
func RandomDigits(number int) string {
return fmt.Sprintf("%1." + strconv.Itoa(number) + "f", rand.Float64())
}