【问题标题】:Random double generation between a range in dart飞镖范围之间的随机双生成
【发布时间】:2019-12-05 09:14:45
【问题描述】:

需要在一个范围之间生成随机双精度数

nextint() 函数采用最大参数,而 nextdouble() 不采用任何参数。 有没有其他方法可以在 dart 的范围之间返回随机双精度值?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    nextDouble 返回一个介于 0 和 1 之间的值(不包括在内)。所以,如果你想要一个在a(包括)到b(不包括)范围内的数字,你可以这样做:

    double doubleInRange(Random source, num start, num end) => 
        source.nextDouble() * (end - start) + start;
    
    print(doubleInRange(random, a, b));
    

    【讨论】:

    • 为什么不使用double 而不是int 作为参数? double doubleInRange(Random source, double start, double end) => source.nextDouble() * (end - start) + start;
    • 上面的代码可以用以下数学符号表示:[0,1) => [0, max-min) => [min, max)
    【解决方案2】:

    不,没有,但很容易重新创建它,因为 nextInt 只需要一个 max 值(独占)。

    nextDouble() * max

    【讨论】:

      【解决方案3】:

      我怀疑有。如果您只需要双精度值,您可以将整数值转换为双精度值

      import 'dart:math';
      
      main() {
      var rng = new Random();
      for (var i = 0; i < 10; i++) {
      print(rng.nextInt(100).toDouble());
      }}
      

      如果您想要 nextDouble() 生成的双精度值类型,例如“0.2502033576383784”,我建议您创建一个函数来处理值范围。

      import 'dart:math';
      
      main() {
      var rng = new Random();
      for (var i = 0; i < 10; i++) {
      print(rng.nextDouble()+rng.nextInt(50));
      }}
      

      【讨论】:

        【解决方案4】:

        我还有一个更简单的解决方案可以添加到列表中(仅限 Max range)。

        var random = Random();
        int randomInt = random.nextInt(45);
        double randTemp = random.nextDouble() * randomInt;
        

        【讨论】:

          猜你喜欢
          • 2022-10-17
          • 2012-10-30
          • 1970-01-01
          • 2022-06-19
          • 2014-03-31
          • 2020-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多