读书人

求指定范围内的随机小数,该如何解决

发布时间: 2013-06-19 10:26:41 作者: rapoo

求指定范围内的随机小数
本帖最后由 diypyh 于 2013-05-19 14:57:44 编辑 需求:求指定范围内的随机小数

如:求1.22~2.56之间的随机小数(精确到小数点后2位)

PS:看过Random.nextFloat()方法,此方法是得到0~1之间的随机数。
[解决办法]
曲线救国


package com.csdn;

import java.util.Random;

public class Float {
Random r1 = new Random();
Random r2 = new Random();
public float generateFloat()
{
float f1 = r1.nextFloat();
int i = r2.nextInt(3);
float f2 = f1 + i;
if(f2 >= 1.22 && f2 <= 2.56)
return f2;
else
return generateFloat();
}
public static void main(String[] args) {
Float f = new Float();
long t1 = System.currentTimeMillis();
System.out.println(f.generateFloat());
long t2 = System.currentTimeMillis();
System.out.println("It takes " + (t2 - t1) + " ms");


}

}


[解决办法]
public class Float {

public static float generateFloat1()
{
Random random = new Random();

float add=(float) (random.nextFloat()*1.34);//1.22-2.56之间的增量。增量的随机数范围在0~1.34之间
float randomFloat=(float) (add+1.22);//增量加上1.22以后整个区间的范围在1.22~2.56之间。

return randomFloat;
}


public static void main(String[] args) {
long t1 = System.currentTimeMillis();

System.out.println(generateFloat1());

long t2 = System.currentTimeMillis();
System.out.println("It takes " + (t2 - t1) + " ms");

}

}

[解决办法]
我是采用BigDecimal,另外还可以采用new DecimalFormat("##0.00"); 不过转换后的是string,还需要转换
package j2se_519;

import java.math.BigDecimal;

/**
* 求1.22~2.56之间的随机小数(精确到小数点后2位)
*
* @author 王二麻子
*/
public class RandomDemo1 {
public static void main(String[] args) {

double d = 1.22 + Math.random() * (2.56 - 1.22);


BigDecimal b = new BigDecimal(d);
float f = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();

System.out.println(f);

}

}

读书人网 >J2SE开发

热点推荐