【发布时间】:2019-12-05 09:14:45
【问题描述】:
需要在一个范围之间生成随机双精度数
nextint() 函数采用最大参数,而 nextdouble() 不采用任何参数。
有没有其他方法可以在 dart 的范围之间返回随机双精度值?
【问题讨论】:
需要在一个范围之间生成随机双精度数
nextint() 函数采用最大参数,而 nextdouble() 不采用任何参数。
有没有其他方法可以在 dart 的范围之间返回随机双精度值?
【问题讨论】:
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;
不,没有,但很容易重新创建它,因为 nextInt 只需要一个 max 值(独占)。
nextDouble() * max
【讨论】:
我怀疑有。如果您只需要双精度值,您可以将整数值转换为双精度值
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));
}}
【讨论】:
我还有一个更简单的解决方案可以添加到列表中(仅限 Max range)。
var random = Random();
int randomInt = random.nextInt(45);
double randTemp = random.nextDouble() * randomInt;
【讨论】: