【发布时间】:2011-02-16 23:20:17
【问题描述】:
我需要从给定范围内生成随机 BigDecimal 值。用Java怎么做?
【问题讨论】:
标签: java bigdecimal
我需要从给定范围内生成随机 BigDecimal 值。用Java怎么做?
【问题讨论】:
标签: java bigdecimal
class BigDecRand {
public static void main(String[] args) {
String range = args[0];
BigDecimal max = new BigDecimal(range + ".0");
BigDecimal randFromDouble = new BigDecimal(Math.random());
BigDecimal actualRandomDec = randFromDouble.divide(max,BigDecimal.ROUND_DOWN);
BigInteger actualRandom = actualRandomDec.toBigInteger();
}
}
【讨论】:
R = min + rand(range) 其中range = max - min。
public class BigDecimalGenerator { public static void main(String[] args) { BigDecimal max = new BigDecimal("0.44"); BigDecimal min = new BigDecimal("-0.44"); BigDecimal range = max.subtract(min); BigDecimal result = min .add(range.multiply(new BigDecimal(Math.random()))); System.out.println(result); } }
doubles 1 到 0 之间的精度。希望这足够随机 :)
BigDecimal max = new BigDecimal("100000000000000000000000000000000"); BigDecimal min = new BigDecimal("-100000000000000000000000000000000"); 你的结果看起来像这样:88392126894971667638856160920113.3251190185546875000000000000000000000000000000000
我就是这样做的
public static BigDecimal generateRandomBigDecimalFromRange(BigDecimal min, BigDecimal max) {
BigDecimal randomBigDecimal = min.add(new BigDecimal(Math.random()).multiply(max.subtract(min)));
return randomBigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP);
}
以及我运行它的方式:
BigDecimal random = Application.generateRandomBigDecimalFromRange(
new BigDecimal(-1.21).setScale(2, BigDecimal.ROUND_HALF_UP),
new BigDecimal(21.28).setScale(2, BigDecimal.ROUND_HALF_UP)
);
【讨论】: