我想知道我们是否可以指定随机生成器在小数点后应该生成多少个数字?默认行为示例:fmt.Println(rand.float64())将打印出数字 0.6046602879796196期望的行为:fmt.Println(rand.float64(4))然后将打印出数字 0.6047。这个功能在 GO 中已经存在还是我必须自己实现?谢谢!
2 回答
守着星空守着你
TA贡献1799条经验 获得超8个赞
听起来只有字符串表示对您很重要,而 fmt 包确实为您提供了:
fmt.Printf("%1.4f", rand.Float64())
所以是的,您仍然需要包装此调用以指定小数点后的位数。
func RandomDigits(number int) string {
return fmt.Sprintf("%1." + strconv.Itoa(number) + "f", rand.Float64())
}
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
我不知道这样的功能,但是很容易自己实现(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
- 2 回答
- 0 关注
- 322 浏览
添加回答
举报
0/150
提交
取消