我正在生成随机数,但遇到了均等分配问题。该范围中的第一个和最后一个数字始终具有被选择的一半变化,因为它们不具有在两侧舍入的可能性。
例如,如果用户选择最小值为 1,最大值为 10,则与其他选项相比,1 和 10 被选中的机会会降低。
这是我当前的代码:
double num = random.nextDouble() * (max - min) + min;
String finalNum = String.format("%." + precision + "f", num);
我知道我可以通过使用 nextInt() 来解决这个问题,但问题是我想将其保留为 double ,因为用户选择小数位数。
感谢帮助。
最佳答案
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);
您可以使用 rand (double) 来显示您的精度 并使用 intRand (int) 作为整数随机数。
关于java - Android 随机数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45496721/