java:产生小数位数为2的随机概率,使得和为1

public static List<InstSec> setDataSec(List<String> instno) {
		List<InstSec> result = new ArrayList<InstSec>();
		String[] mon ={"2014-01","2014-02","2014-03","2014-04"};
		int[] flag ={1,2,3,4,5};

		List<String> instnosub5 = new ArrayList<String>();
		for(int i=0;i<instno.size();i++){
			if(!instnosub5.contains(instno.get(i).substring(0,5))){
				instnosub5.add(instno.get(i).substring(0,5));
			}
		}

		//对于每个organValue,每个月,都有五个等级,对应flag prop
		for(int i=0;i<instnosub5.size();i++){
			for(int j=0;j<mon.length;j++){
				float[] prop = genProp();//注意:在此处产生随机概率
				for(int k=0;k<flag.length;k++){
					InstSec inst=new InstSec();
					inst.setInst_no_sub5(instnosub5.get(i));
					inst.setSa_tx_m(mon[j]);
					inst.setFlag(flag[k]);
					inst.setProp(prop[k]);
					result.add(inst);
				}
			}
		}
		return result;
	}

	public static float[] genProp(){
		//产生概率随机数,且让和为1
		float[] prop =new float[5];
		int[] randInt =new int[5];
		int sum=0;
		for(int i=0;i<5;i++){
			randInt[i]=1+(int)(Math.random()*10);
			sum+=randInt[i];
		}
		DecimalFormat dF=new DecimalFormat(".00");
		float sumprop=0;
		for(int i=0;i<5;i++){
			prop[i]= Float.parseFloat(dF.format(1.0*randInt[i]/sum));
//			System.out.println("prop is "+prop[i]);
			sumprop+=prop[i];
		}
//		System.out.println("sumprop is "+sumprop);
		sumprop=Float.parseFloat(dF.format(sumprop));
		if(sumprop<1)
			prop[4]+=1-sumprop;
		else
			prop[4]-=sumprop-1;
//		System.out.println("prop[4] is "+prop[4]);
		return prop;
	}

  注意:向SQL中传参数的下标是从1开始,java的substring方法从0开始

时间: 2024-08-11 01:20:15

java:产生小数位数为2的随机概率,使得和为1的相关文章

java:产生小数位数为2的随机概率,使得和为1(转)

参考https://www.cnblogs.com/kxdblog/p/4197831.html package com.thesis.Method1; import java.text.DecimalFormat; public class MainSolution { private static final int NUM = 5; public static void main(String[] args){ for(float f :genProp()){ System.out.pri

Java学习-047-数值格式化及小数位数四舍五入

此小工具类主要用于数值四舍五入.数值格式化输出,很简单,若想深入研究,敬请自行查阅 BigDecimal 或 DecimalFormat 的 API,BigDecimal.setScale(位数,四舍五入法)中四舍五入法有如下 7 种: 1. ROUND_UP:远离零方向舍入.向绝对值最大的方向舍入,只要舍弃位非0即进位. 2. ROUND_DOWN:趋向零方向舍入.向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况. 3. ROUND_CEILING:向正无穷方向舍入.向正最大方向靠拢.

java如何获取一个double的小数位数

前言 看标题是不是觉得这是一个很简单的问题,我一开始也是这么认为的,但是实际情况下,在各种情况下我们都进行了测试,发现很多实际情况是无法不尽如人意的. 方法分析 当前能想到的比较容易有下面几种 1.直接使用double处理 2.将double转换成String进行处理 方法一:直接对double进行处理,进行计算通过计算后的结果进行取模操作获取小数位数,如下: public static int getNumberDecimalDigits(double number) { if (number

Java中的引用类型Scanner类和随机类型Random

Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型.   引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 = new 数据类型(); 每种引用数据类型都有其功能,我们可以调用该类型实例的功能. 变量名.方法名(); Scanner类 Scanner类是引用数据类型的一种,我们可以使用该类来完成用户键盘录入,获取到录入的数据. Scanner使用步骤: //导包: import jav

在JS中,将text框中数据格式化,根据不同的小数位数,格式化成对应的XXX,XXX,XXX.XX(2位小数) 或者XXX,XXX,XXX(0位小数)

//在JS中,将text框中数据格式化,根据不同的小数位数,格式化成对应的XXX,XXX,XXX.XX(2位小数) 或者XXX,XXX,XXX(0位小数) function formatNum(num, n) {//参数说明:num 要格式化的数字 n 保留小数位 num = String(num.toFixed(n)); var re = /(-?\d+)(\d{3})/; while (re.test(num)) num = num.replace(re, "$1,$2") ret

转,Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数

关于处理小数点位数的几个oracle函数() 1. 取四舍五入的几位小数 select round(1.2345, 3) from dual; 结果:1.235 2. 保留两位小数,只舍 select trunc(1.2345, 2) from dual; 结果:1.23 select trunc(1.2399, 2) from dual; 结果:1.23 3.取整数 返回大于或等于x的最大整数: SQL> select ceil(23.33) from dual; 结果: 24 返回等于或小于

js数据保留小数位数

1000.12345.toFixed(2)=1000.12: 1000.12987.toFixed(2)=1000.13: 1000.1.toFixed(2)=1000.10 js数据保留小数位数,布布扣,bubuko.com

JS中保留小数位数

一.1.2.toFixed(2) 浮点数进行四舍五入设置指定小数位的数值 二.2.toFixed(2) 整数尝试,但是在JS中会被认为是对象名,以至于无法使用 三."1.2".toFixed(2) 由于toFixed方法是针对Number类型的,所以string类型的即使能够转换成数字,也不能使用这个方法 四.var a=1;a.toFixed(2); 构造整数对象,那么就可以调用了 http://www.w3school.com.cn/jsref/jsref_tofixed.asp

ADF_12c_保留小数位数问题

Jdeveloper (Version 12.1.2)默认显示三位小数,有小数精度要求时,给出如下解答. 进入该VO,找到有小数位数需求的列: 属性 UI Hint       format type:Number       format:###0.000000 如上是保留六位小数的情况,其他可类推.