我创建了一个方法来创建一些随机双值,例如10个值:num1,num2,... num10,这10个值之和为1:num1 + num2 + ... + num10 = 1 我的方法就像论坛中的方法一样 Getting N random numbers that the sum is M:
private static double[] randSum(int n, double m) {
Random rand = new Random();
double randNums[] = new double[n], sum = 0;
for (int i = 0; i < randNums.length; i++) {
randNums[i] = rand.nextDouble();
sum += randNums[i];
}
for (int i = 0; i < randNums.length; i++) {
randNums[i] /= sum * m;
}
return randNums;
}
但是这种方法创建了很长的数字,如:0.18593711849349975 我甚至使用了Math.round()方法但是使用这种方法我的数字是0.0,0.5,0.0,...... 我需要从0.01到0.99或0.1到0.9的数字。如果我使用整数,我可以用Random.nextInt(0.98)+0.01这样做,但是nextDouble()方法不接受参数,我该怎么做?你能帮帮我吗?感谢
答案 0 :(得分:4)
您可以通过nextInt生成整数,然后将其除以所需的10的幂。
答案 1 :(得分:2)
生成nextDouble();并使用此方法将其舍入
public static double round(double d, int decimalPlace){
BigDecimal bd = new BigDecimal(Double.toString(d));
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);
return bd.doubleValue();
}
double d = 3.1537; // output is 3.2 System.out.println(d + " : " + round(d, 1)); // output is 3.15 System.out.println(d + " : " + round(d, 2)); // output is 3.154 System.out.println(d + " : " + round(d, 3));
答案 2 :(得分:1)
将您的数字乘以100并将结果四舍五入。这将为您提供原始数字,并删除无效数字。然后将结果除以100以返回原始比例。
x = Math.round(x*100.0) / 100.0;
答案 3 :(得分:0)
如果你想使用2位小数,你可以按如下方式进行:
private static double[] randSum(int n, double m){
double[] randoms = new double[n];
int valueLeft = (int) (m * 100);
for(int i = 0; i < n-1; i++){
int tempRand = (int)(Math.random() * valueLeft);
randoms[i] = (double)tempRand / 100;
valueLeft -= tempRand;
System.out.println(tempRand + " " + randoms[i] + " " + valueLeft);
}
randoms[n-1] = (double)valueLeft/100;
return randoms;
}