为什么在Java中(int) Math.random()*10不能产生10?

7
为什么下面的代码只能产生0到9之间的数字,而不能产生10呢?
我理解Math.random()生成的是0到1.0之间的随机数,所以它可以生成0.99987这样的数字,通过*10运算变成10,不是吗?
int targetNumber = (int) (Math.random()* 10);

你应该使用Random.nextInt()来获取“更好”的随机数:https://dev59.com/M3RB5IYBdhLWcg3wCjnO#738651 - Goibniu
8个回答

19

在Java中,将double强制转换为int会进行整数截断。这意味着,如果您的随机数是0.99987,则将其乘以10得到9.9987,整数截断则为9。


14

来自Math javadoc的描述:

"伪随机数,大于等于0.0且小于1.0"

由于Math.random不可能返回1.0,因此无法得到10。而 (int) 9.999 的结果是9。


2
由于使用int()函数时,(Math.random()* 10会被四舍五入为整数,因此int(9.9999999)的结果会是9

1

因为(int)向下取整。
(int)9.999的结果是9。 //整数截断


1
有一个打字错误,(int)0.999 的结果是0。 - pgras

0

你可以将1加到等式中,这样输出就会从1到10而不是0到9,像这样:

int targetNumber = (int) (Math.random()* 10+1);

0
你可以在指令的末尾加上+1,从而使它将1添加到生成的数字中。因此,你会得到类似下面这样的内容:
int randomnumber = ( (int)(Math.random( )*10) +1);

这将生成介于1和10之间的任何整数。

如果您想要介于0和10之间的任何整数,可以这样做:

int randomnumber = ( (int)(Math.random( )*11) -1);

希望这能帮到你!


0

Math.floor(Math.random() * 10) + 1

现在你可以得到一个介于1和10之间的整数,包括数字10。


0
0.99987乘以*10后变成了10。
我上学的时候不是这样,它会变成9.9987。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接