【问题标题】:Generating random BigDecimal value from given range从给定范围生成随机 BigDecimal 值
【发布时间】:2011-02-16 23:20:17
【问题描述】:

我需要从给定范围内生成随机 BigDecimal 值。用Java怎么做?

【问题讨论】:

标签: java bigdecimal


【解决方案1】:
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();
    }
}

【讨论】:

  • 但是如何从范围 [-0.45,0.6] 中生成一个值?
  • 好吧,您可以使用该代码为该范围找到一个随机数,然后将 minValue 添加到其中。 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
【解决方案2】:

我就是这样做的

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)
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-25
    • 2011-04-03
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 2010-10-01
    • 2017-06-27
    • 1970-01-01
    相关资源
    最近更新 更多