为了账号安全,请及时绑定邮箱和手机立即绑定

GO:操纵随机生成的 float64

GO:操纵随机生成的 float64

Go
慕慕森 2021-07-08 17:15:44
我想知道我们是否可以指定随机生成器在小数点后应该生成多少个数字?默认行为示例: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())

}


查看完整回答
反对 回复 2021-07-19
?
繁星点点滴滴

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


查看完整回答
反对 回复 2021-07-19
  • 2 回答
  • 0 关注
  • 322 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信