【发布时间】:2015-11-15 03:07:45
【问题描述】:
所以,我的想法是能够将 2.00 美元分成 10 个人,每个人将随机收到 $x.xx 的金额。 (N 和 M 将始终限制为 2 位小数且 > 0)
例如:{0.12、0.24、1.03、0.01、0.2、0.04、0.11、0.18、0.05、0.02}
目前我已经尝试过:
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);
}
但是 BigDecimals 太混乱了,它们不能加起来。有时总数为 1.98 或 2.01。由于双精度浮点数,双精度数不起作用。
代码取自:
【问题讨论】:
-
如果
m == 1.234怎么办?你永远无法生成这样的数字。 -
我已经修复了条件,N 和 M 将始终限制为 2 位小数和 > 0