Home  >  Q&A  >  body text

javascript - 关于underscore _.random 负数取随机数的问题?

1.underscore里面有一个方法_.random,定义如下:

// Return a random integer between min and max (inclusive).
// integer : {-1,0,1} 负整数 、 0 、正整数
// https://zh.wikipedia.org/wiki/%E6%95%B4%E6%95%B0
// [x,y]包括y,注意与Math.random的区别
_.random = function(min, max) {
    if (max == null) {
        max = min;
        min = 0;
    }
    return min + Math.floor(Math.random() * (max - min + 1));
};

再传入正整数的时候没有问题:

带入10,(max=10,min=0)

return 0 + Math.floor(Math.random()*(10-0)+1);
return 0 + Math.floor( [0,1)*11 );
return 0 + Math.floor( [0,11) );    
return 0 + [0,10];    
return [0,10]

会生成一个0-10包括0,10之间的整数

但是如果传入一个-10(max = -10,min = 0):

return 0 + Math.floor(Math.random()*(-10-0)+1);
return 0 + Math.floor( [0,1)* -9 );
return 0 + Math.floor( [0,-9) );    
return 0 + [0,-9];    
return [0,-9]

这样只会生成0,-9包括0,-9之间的整数,没有-10。

这样的话:

Return a random integer between min and max (inclusive)
返回一个min到max(包括)之间的一个随机整数

上面这句话就有问题了?负数的时候,无法生成最小的边界值。不知道我这样理解对不对,望指正!

ringa_leeringa_lee2726 days ago284

reply all(1)I'll reply

  • 伊谢尔伦

    伊谢尔伦2017-04-11 13:12:28

    你弄反了max和min

    max = 0, min = -10

    return min + Math.floor(Math.random() * (max - min + 1));
    return -10 + Math.floor(Math.random() * (0 - (-10) + 1));
    return -10 + Math.floor([0,1) * 11);
    return -10 + [0, 10];
    return [-10, 0]

    这样毫无问题

    reply
    0
  • Cancelreply