Donc, l'idée que j'ai, est de pouvoir diviser $ 2,00 en 10 personne, et chacun d'eux recevra $ x.xx montant d'argent au hasard. (N et M seront toujours limitées à 2 décimales et> 0)Diviser aléatoirement un nombre donné M en N parties
Ex: {0,12, 0,24, 1,03, 0,01, 0,2, 0,04, 0,11, 0,18, 0,05, 0,02}
Actuellement j'ai essayé :
private static BigDecimal[] randSum(int n, double m)
{
Random rand = new Random();
BigDecimal randNums[] = new BigDecimal[n], sum = new BigDecimal(0).setScale(2);
for (int i = 0; i < randNums.length; i++)
{
randNums[i] = new BigDecimal(rand.nextDouble()).setScale(2, RoundingMode.HALF_EVEN);
sum = sum.add(randNums[i]);
}
for (int i = 0; i < randNums.length; i++)
{
BigDecimal temp1 = randNums[i].divide(sum, 2, RoundingMode.HALF_EVEN);
BigDecimal temp2 = temp1.multiply(new BigDecimal(m).setScale(2));
randNums[i] = temp2;
}
return randNums;
}
public static void main(String[] args)
{
BigDecimal d[] = randSum(5, 2);
double sum = 0;
for (BigDecimal n : d)
{
sum += n.doubleValue();
System.out.println(n);
}
System.out.println("total: " + sum);
}
Mais BigDecimals sont trop confus et ils ne s'additionnent pas. Parfois, le total est de 1,98 ou 2,01. Les doubles ne fonctionnent pas en raison du flottement en double précision.
Le code a été prise à partir de:
Getting N random numbers that the sum is M
Que faire si 'm == 1.234'? Vous ne pouvez jamais générer de tels nombres. –
J'ai fixé les conditions, N et M seront toujours limitées à 2 décimales et> 0 – feco