我想知道我们是否可以指定随机生成器在小数点后应该生成多少个数字?
默认行为示例:
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))
}
将数字n
小数位向左移动,截断小数位,将数字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())
}