Math.random()Javascript-百分比和权重
我有一个问题,我需要有一个百分比的通话记录,系统不允许只是设置。所以在我的代码中,我需要计算它,然后说20%不记录 有人建议使用Math.Random()函数来实现这一点,但我看不出随机数是如何生成的 因此:Math.random()Javascript-百分比和权重,javascript,math,ecmascript-6,percentage,Javascript,Math,Ecmascript 6,Percentage,我有一个问题,我需要有一个百分比的通话记录,系统不允许只是设置。所以在我的代码中,我需要计算它,然后说20%不记录 有人建议使用Math.Random()函数来实现这一点,但我看不出随机数是如何生成的 因此: 我只是不知道每100个电话中这个数字会如何平衡,它能在100个电话中产生两次相同的号码吗?或者它能工作到100然后重新开始吗?每当我需要基于固定概率发生某事时,我通常处理0到1之间的浮点,这与Math.random()输出随机值的方式相同 我已经重新编写了您的程序以适应概率,但是如果您愿意
我只是不知道每100个电话中这个数字会如何平衡,它能在100个电话中产生两次相同的号码吗?或者它能工作到100然后重新开始吗?每当我需要基于固定概率发生某事时,我通常处理0到1之间的浮点,这与
Math.random()输出随机值的方式相同
我已经重新编写了您的程序以适应概率,但是如果您愿意,使用百分比并没有什么错。我只是觉得乘以100没有多大用处,也不会让程序更可读(至少对我来说)
我很久以前看过一段精彩的视频,描述了这个概念
上面的代码可以工作,并且大多数情况下,disable_recording()
不会被调用,因为很可能,random()
函数将输出小于0.8的值。但偶尔(20%的时间)会调用该函数 每当我需要基于固定概率发生某件事时,我通常会处理介于0和1之间的浮点,这与Math.random()
输出随机值的方式相同
我已经重新编写了您的程序以适应概率,但是如果您愿意,使用百分比并没有什么错。我只是觉得乘以100没有多大用处,也不会让程序更可读(至少对我来说)
我很久以前看过一段精彩的视频,描述了这个概念
上面的代码可以工作,并且大多数情况下,disable_recording()
不会被调用,因为很可能,random()
函数将输出小于0.8的值。但偶尔(20%的时间)会调用该函数 您能否向我们展示更广泛的代码上下文和示例输入以及所需的输出?您可以预期范围为[0..100]的随机数。如果您从生成器中选取100个样本,那么您(a)必须期望重复,并且(2)不能期望看到结果中范围内的每个数字。一般来说,这应该是可行的,但是大多数随机生成器如果用于更大次数的尝试或调用,则效果最好。它应该是平衡的。你能给我们展示更广泛的代码上下文和示例输入以及所需的输出吗?你可以预期范围为[0..100]的随机数。如果您从生成器中选取100个样本,那么您(a)必须期望重复,并且(2)不能期望看到结果中范围内的每个数字。一般来说,这应该是可行的,但是大多数随机生成器如果用于更大次数的尝试或调用,则效果最好。它应该是平衡的。我要试试这个。看看它是如何用0-1得到结果的,使用更大的范围让我担心。我会做一些测试。谢谢everyone@RussellHeaney乘以常数并不是一个真正的问题0.8*100>x*100
和0.8>x
对于x
的任何值都会有相同的结果。虽然乘法不是真正相关的。这样做的唯一原因是,如果你从用户那里得到百分比(例如,配置或其他),在这种情况下,人们为80%
键入80
更为自然,即使0.8
表达了完全相同的想法。我将尝试一下。看看它是如何用0-1得到结果的,使用更大的范围让我担心。我会做一些测试。谢谢everyone@RussellHeaney乘以常数并不是一个真正的问题0.8*100>x*100
和0.8>x
对于x
的任何值都会有相同的结果。虽然乘法不是真正相关的。这样做的唯一原因是如果你从用户那里得到百分比(例如,配置或其他),在这种情况下,人们为80%
键入80%
更为自然,即使0.8
表达了完全相同的想法。
var desiredrecordpercentage = 80
var percentageCheck = Math.random()*100;
if (percentageCheck >= desiredrecordpercentage){
disable recording;
}
var desiredRecord = 0.8; // 1: record everything,
// 0: record nothing
var check = Math.random(); // check will be anywhere between 0 and 1
if (check > desiredRecord) { // will be true if check is between 0.81 and 0.99
// but false if check is below 0.8
// which is more probable since 80 is the
// majority or the percentile
disable_recording();
}