/**
*
* JAVA 返回随机数,并根据概率、比率
* <p/>
*
* @author <a href="mailto:durb@etuo.cn">durb</a>
* @version Date: 2015年4月15日 下午3:22:22
* @serial 1.0
* @since 2015年4月15日 下午3:22:22
*/
public class MathRandom {
/**
* 1出现的概率为%50
*/
public static double rate1 = 0.50;
/**
* 2出现的概率为%20
*/
public static double rate2 = 0.20;
/**
* 3出现的概率为%15
*/
public static double rate3 = 0.15;
/**
* 4出现的概率为%10
*/
public static double rate4 = 0.10;
/**
* 5出现的概率为%4
*/
public static double rate5 = 0.04;
/**
* 6出现的概率为%1
*/
public static double rate6 = 0.01;
/**
* Math.random()产生一个double型的随机数,判断一下 例如0出现的概率为%50,则介于0到0.50中间的返回0
*
* @return int
*
*/
private int PercentageRandom() {
double randomNumber;
randomNumber = Math.random();
if (randomNumber >= 0 && randomNumber <= rate1) {
return 1;
} else if (randomNumber >= rate1
&& randomNumber <= rate1 + rate2) {
return 2;
} else if (randomNumber >= rate1 + rate2
&& randomNumber <= rate1 + rate2 + rate3) {
return 3;
} else if (randomNumber >= rate1 + rate2 + rate3
&& randomNumber <= rate1 + rate2 + rate3 + rate4) {
return 4;
} else if (randomNumber >= rate1 + rate2 + rate3 + rate4
&& randomNumber <= rate1 + rate2 + rate3 + rate4 + rate5) {
return 5;
} else if (randomNumber >= rate1 + rate2 + rate3 + rate4 + rate5
&& randomNumber <= rate1 + rate2 + rate3 + rate4 + rate5 + rate6) {
return 6;
}
return -1;
}
/**
* 测试主程序
*
* @param agrs
*/
public static void main(String[] agrs) {
int i = 0;
MathRandom a = new MathRandom();
for (i = 0; i <= 100; i++)// 打印100个测试概率的准确性
{
System.out.println(a.PercentageRandom());
}
}
}
JS 算法概率
function prizeRand(oArr) { var sum = 0; // 总和 var rand = 0; // 每次循环产生的随机数 var result = 0; // 返回的对象的key console.log(oArr); // 计算总和 for (var i in oArr) { sum += oArr[i][0]; } // 思路就是如果设置的数落在随机数内,则返回,否则减去本次的数 for (var i in oArr) { rand = Math.floor(Math.random()*sum + 1); if (oArr[i][0] >= rand) { result = oArr[i][0]; break; } else { sum -= oArr[i][0]; } } return result; } var oArr = {'5':[5, 'Mac'], '3':[15, 'iPhone'], '2':[30, 'iPad'], '1':[50, 'iWatch']}; console.log(prizeRand(oArr));