首页 文章

如何在JavaScript中从最大值中随机输入十进制数

提问于
浏览
1

我已经找到了这个社区的解决方案,但我找不到解决方案 . 我的问题是“如何在JavaScript中从最大值中随机输入十进制数?”

示例:如果我将Total设置为1并将Size设置为5,那么我想为数组生成一个十进制数(大小为5),其总和为1 .

Sum Total: 1
Array Size: 5

结果数组:

[0.23, 0.12, 0.4, 0.14, 0.11]

谢谢你的建议 . 最好的祝福 .

1 回答

  • 0

    如果我正确理解了您的要求,您希望生成一个具有固定总和的 n 数组(让我们称之为 s ) .

    让我们从生成 n 随机数开始 . Javascript的Math.random()创建0到1之间的数字,如下所示:

    function randomArray(length, sum) {
      return new Array(length).fill(0).map(() => Math.random());
    }
    
    const rand = randomArray(5, 1);
    console.log(rand);
    
    console.log('Sum: ', rand.reduce((a, b) => (a + b), 0));
    

    此函数使用 length 参数创建一个新数组,用 0 填充它以初始化它,然后用随机数替换每个元素 .

    为了满足 sum 限制,我们需要做三件事:

    • 求所有随机数;

    • 将所需总和除以计算的总和,以获得比例因子,和

    • 按此比例因子乘以每个数字 .

    function randomArray(length, sum) {
      const rawRandom = new Array(length).fill(0).map(() => Math.random());
      const multiplier = sum / rawRandom.reduce((a, b) => (a + b), 0);
      return rawRandom.map(n => (n * multiplier));
    }
    
    const rand = randomArray(5, 1);
    console.log(rand);
    
    console.log('Sum: ', rand.reduce((a, b) => (a + b), 0));
    

相关问题