获取最接近另一个double值的随机double值(但仍然是随机的)

时间:2011-06-11 12:26:42

标签: c# random

我想说我希望获得一个随机双倍值:

  1. 大于-0.150
  2. 小于+0.150
  3. 最接近0.440
  4. 这个号码必须是随机的......

    我该怎么做?


    其他信息:

    就像你说的那样...... 0.440不在[-0.150,0.150]中,但我需要在这个范围内生成一个接近该数字的数字......

    我要打电话说:

    getMyRandomNumber(-0.150, 0.150, 0.440)
    

    我想得到[-0.150,0.150]范围内的数字,但它不是总是0.150

    我想得到0.139,0.140,0.121等数字......

    如果我打电话:

    getMyRandomNumber(-0.150, 0.150, -0.440)
    

    我想得到像-0.139,-0.140,-0.121,......这样的数字

2 个答案:

答案 0 :(得分:2)

Random's NextDouble()返回介于0.0和1.0之间的随机数

如果你想根据NextDouble()中的随机数在区间(a,b)中得到一个随机数,那么你需要将你得到的(0.0,1.0)区间映射到(a,b)区间你需要。

最简单的方法是使用这个公式: result = a + (b - a) * X 其中XNextDouble()

的结果

如果X为0,则resulta,如果X为1,则resultbXresult 1}}介于0.0和1.0之间a介于b和{{1}}之间。

如果您希望数字接近某个数字(比如0.44)但不超过0.15,那么您需要将结果映射到(0.44 - 0.15,0.44 + 0.15)区间。

答案 1 :(得分:0)

Random g = new Random();
double max = double.MaxValue;
double a = g.NextDouble() * max - 0.150; // greater then -0.15
double b = -g.NextDouble() * max + 0.150; // less then 0.15

最接近的不是明确的定义