我正在测试如何计算一组应收款在分成多个分期时的损失金额。 我有10,000个应收账款,我需要在1到12期分期内随机分配,对于每个分期付款,我都有一定比例的损失。
我已经创建了一个数组,用于保存分期付款及其价值[损失百分比,应收款项数量除以分期付款数量,分期付款组损失金额]以填充值[1,2]。
var instllmtGrp = {
x1: [.10,0,0]
,x2: [.08,0,0]
,x3: [.06,0,0]
,x4: [.04,0,0]
,x5: [.03,0,0]
,x6: [.02,0,0]
,x7: [.01,0,0]
,x8: [.01,0,0]
,x9: [.01,0,0]
,x10: [.01,0,0]
,x11: [.01,0,0]
,x12: [.01,0,0]
};
当我尝试创建一个包含12个元素(即1/12分期)的数组并为每个元素设置1到10.000范围内的随机值时,我总共得到了超过10,000个值,因为数学为每个数组元素分配1 / 10.000的数字。
var parcelas = Array.from({length: 12}, () => Math.floor(Math.random() * (10000 - 1 + 1)) + 1);
有没有办法设置数组值总和的限制?或者指定随机值而不超过10.000?
答案 0 :(得分:1)
在循环中创建值。创建每个值后,将其从总数限制中减去。
var limit = 10000;
var parcelas = [];
for (var i = 0; i < 11; i++) {
var rand = Math.floor(Math.random() * (limit - 1)) + 1;
parcelas.push(rand);
limit -= rand;
}
parcelas.push(limit);
console.log(JSON.stringify(parcelas));
console.log('Sum = ', parcelas.reduce((a, b) => a + b, 0));
&#13;
答案 1 :(得分:0)
你声明你想要随机数加起来10000.在你的阵列和现有答案中,这些&#34;随机&#34;数字往往会下降。如果不需要,这里有一种方法可以获得随机(除了最后一个元素的软糖因子)数字加起来10000,并且没有下降的上限。
var parcelas = [];
var totalAmount = 10000;
var sum = 0;
var testSum = 0;
for (var i = 0; i < 12; i++) {
var val = Math.random();
sum += val;
parcelas.push(val);
}
for (var i = 0; i < 11; i++) {
parcelas[i] = Math.round(parcelas[i] * totalAmount / sum);
testSum += parcelas[i];
}
parcelas[11] = totalAmount - testSum;
testSum += parcelas[11];
console.log(parcelas.toString());
console.log("Sum: " + testSum);
&#13;