2017-08-04 47 views
0

我正在生成随机数,我的分布问题是平等的。该范围内的第一个和最后一个数字总是只有一半的选择变化,因为它们没有被双方舍入的可能性。Android随机数发行

例如,如果用户选择1分钟和10的最大值,那么与其他人相比,1和10的挑选机会会减少。

这里是我当前的代码:

double num = random.nextDouble() * (max - min) + min; 
String finalNum = String.format("%." + precision + "f", num); 

我知道我可以通过使用nextInt()解决这一问题,而不是,但问题是,我想保持它的双重因为用户选择多少小数将有。

帮助表示赞赏。

+3

你现在计算'num'就迫使它成为'int'。切换到'nextInt'根本不会改变精度。您希望的任何精度都已被丢弃。 – resueman

+0

我修复了代码。我输错了。这就是我的代码看起来像 – Jared

回答

1
double min = 1.0; 
double max = 10.0; 
double rand = r.nextDouble(); 
//now we add 1 for the spread (we want the number to be from 0.5 to 10.5) 
double range = max - min + 1; 
rand *=range; 
//now we shift by an offset of min-0.5; 
rand += (min -0.5); 
//now we round the number 
int intRand = Math.round(rand); 

可以使用兰特(双),用于显示您的精密 和使用intRand(INT)为您的整数随机的。

+0

我编辑你的代码有点适合我的需求,它的工作。谢谢! – Jared