Random 如何在Go中生成固定长度的随机数?
在Go中生成固定长度随机数的最快和最简单的方法是什么 比如说,要生成8位长的数字,Random 如何在Go中生成固定长度的随机数?,random,go,numbers,Random,Go,Numbers,在Go中生成固定长度随机数的最快和最简单的方法是什么 比如说,要生成8位长的数字,rand.Intn(100000000)的问题是,结果可能远小于8位数字,用前导零填充它看起来不是一个好的答案 也就是说,我更关心随机性的长度。所以我在想,对于这个特定的问题,以下是最快最简单的方法吗 99999999 - rand.Int63n(90000000) 也就是说,我想Int63n可能比Intn更适合我的情况。是真的,还是一厢情愿?关于完整8位数字的随机性,这两个数字是相同的,还是真的有一个比另一个更
rand.Intn(100000000)
的问题是,结果可能远小于8位数字,用前导零填充它看起来不是一个好的答案
也就是说,我更关心随机性的长度。所以我在想,对于这个特定的问题,以下是最快最简单的方法吗
99999999 - rand.Int63n(90000000)
也就是说,我想Int63n
可能比Intn
更适合我的情况。是真的,还是一厢情愿?关于完整8位数字的随机性,这两个数字是相同的,还是真的有一个比另一个更好
最后,还有比上面更好的方法吗
更新:
请不要提供low+rand(hi-low)
作为答案,这是众所周知的。这相当于我现在所做的,它并没有回答我真正的问题,“关于8位数字的随机性,这两个数字是相同的,还是真的有一个比另一个好?”
如果没有人能回答这个问题,我将在两者之间绘制一个二维散点图,然后找出我自己
谢谢这取决于您要使用的值范围
fmt.Sprintf(“%08d”,rand.Intn(100000000))
ranNumber:=10000000
+rand.Intn(90000000)`这是一个通用函数,用于生成范围内的数字
func rangeIn(low, hi int) int {
return low + rand.Intn(hi-low)
}
在电视上看到了吗
在您的特定情况下,尝试生成8位数字,范围将是
(100000009999999)
您的用例是什么?对我来说,似乎你想要一个由8位数字组成的字符串,而不是一个数字本身?这个答案可能会有所帮助:@Ezra,这个问题实际上是受到这个问题的启发,尽管经过多次性能改进,仍然无法摆脱这个循环。是的,我确实希望字符串由8位数字组成,而不是一个数字本身。即使是十六进制数字也可以。关键是,我的上述解决方案可以一次完成,我相信这将比最快的解决方案快得多,这远不是简单的。用零填充没有什么错:如果填充一个随机数,它可能以一个或多个零开始,并且仍然是完全随机的。@Volker,我个人的品味没有什么不好,我不想要填充物。你可能喜欢00000023
,甚至00000004
作为答案,但我个人不喜欢。我已经在OP中清楚地说明了这一点,所以我不认为你争论这一点有什么意义——这一切都归结于个人品味,所以请不要把你的观点强加给别人。如果我伤害了你的感情,请原谅。我只是不知道随机数与其说是数学问题,不如说是品味问题。很抱歉