总监给我一个需求文档,如下:
- 3000以下生成一个,3000至5999生成二个,6000至8999生成三个,类推。
- 生成2个以上含2个,每个都要随机自然数,但不超过总数
- 生成随机数后可以手动修改,要计算差数
根据输入的数字生成几个
3000以下生成一个,3000~5999生成二个,6000~8999生成三个,类推
代码如下:
var enterNumber = "" //输入数字的值
var sum = (enterNumber / 1000) / 3 + 1; // 1是因为生成的个数至少1
var num = parseInt(sum); // 去除小数,变成自然数,最终生成的个数
// enterNumber = 2500; sum = 1.8333333333333335; num = 1
// enterNumber = 3000; sum = 2; num = 2
// enterNumber = 5500; sum = 2.833333333333333; num = 2
// enterNumber = 9999; sum = 4.333; num = 4
生成随机自然数
生成2个以上含2个,每个都要随机自然数,但不超过总数
代码如下:
var max = enterNumber / num; // 拿平均数作为最大值
var min = max / 1.2; // 最大值除以1.2作为最小值
var aryRet = [];
var iAcc = 0;
for(var i = 0; i < (num - 1); i++){ // num - 1 生成的个数减1
var iTmp = Math.floor(Math.random() * (max-min+1)+min); // 生成随机自然数
aryRet.push(iTmp);
iAcc += iTmp // num-1的个数生成后的随机自然数总数
}
// enterNumber减上面总数剩余给num的最后一个赋值
aryRet.push(enterNumber-iAcc)
// enterNumber=3000; 生成aryRet: [1451, 1549]
// enterNumber=6000; 生成aryRet: [1874, 1922, 2204]
计算差数
修改事件里面,如下:
var difference = 0 //差数
var numSum = 0
for(var i = 0; i < aryRet.length; i++){
numSum += parseFloat(aryRet[i])
}
difference = parseFloat(enterNumber) - numSum // 输入的数字减去生成的数字