猿问

GO:操纵随机生成的 float64

我想知道我们是否可以指定随机生成器在小数点后应该生成多少个数字?

默认行为示例:

fmt.Println(rand.float64())

将打印出数字 0.6046602879796196

期望的行为:

fmt.Println(rand.float64(4))

然后将打印出数字 0.6047。

这个功能在 GO 中已经存在还是我必须自己实现?

谢谢!


慕慕森
浏览 323回答 2
2回答

守着星空守着你

听起来只有字符串表示对您很重要,而 fmt 包确实为您提供了:fmt.Printf("%1.4f", rand.Float64())所以是的,您仍然需要包装此调用以指定小数点后的位数。func RandomDigits(number int) string {    return fmt.Sprintf("%1." + strconv.Itoa(number) + "f", rand.Float64())}

繁星点点滴滴

我不知道这样的功能,但是很容易自己实现(play):// Truncate the number x to n decimal places//// +- Inf -> +- Inf; NaN -> NaNfunc truncate(x float64, n int) float64 {    return math.Trunc(x * math.Pow(10, float64(n))) * math.Pow(10, -float64(n))}将数字n小数位向左移动,截断小数位,将数字n位向右移动。如果您想向用户展示您的号码,那么您将在某一时刻将号码转换为字符串。当您这样做时,您不应使用此方法,而应使用Tyson指出的字符串格式。例如,由于浮点数不精确,可能存在舍入错误:truncate(0.9405090880450124,3) // 0.9400000000000001
随时随地看视频慕课网APP

相关分类

Go
我要回答