如何使用Math.random()生成-9到9范围内的随机数?
解决Math.random()生成-9到9随机数的问题
嘿,我来帮你捋清楚这个问题!你的代码之所以会出现random1全负、random2全正的情况,是因为没搞对Math.random()的范围和计算逻辑:
先说说你原有代码的问题
Math.random()的返回值是**[0, 1)**区间的浮点数(大于等于0,严格小于1):
- 对于
random1 = Math.random() * 9 + -9:Math.random()*9得到的是[0,9),加上-9后范围变成[-9, 0),所以必然全是负数; - 对于
random2 = Math.random() * -9 + 9:Math.random()*-9得到的是(-9, 0],加上9后范围变成(0,9],自然全是正数。
这两个写法都只覆盖了你想要的[-9,9]范围的一半,当然没法随机出正负都有的数啦。
正确的写法
要生成覆盖[-9,9)区间的随机数,核心是先算出目标范围的总跨度,再调整起点:
- 目标范围的跨度:
9 - (-9) = 18 - 用
Math.random() * 18生成[0,18)的随机数 - 减去9,把范围从[0,18)平移到[-9,9)
对应的代码:
double randomNum = Math.random() * 18 - 9;
如果你习惯另一种思路,也可以先生成[-1,1)的随机数再放大9倍,效果完全一样:
double randomNum = (Math.random() * 2 - 1) * 9;
关于是否包含9的说明
因为Math.random()永远不会返回1,所以上面的代码生成的数是小于9的。如果业务场景必须包含9,可以用一个小技巧(比如把乘数调大一点点,比如18.0000001),但绝大多数情况下,[-9,9)的范围已经能满足需求了。
内容的提问来源于stack exchange,提问作者Luke Mihalovich
相关产品推荐
相关产品推荐

