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

时间:2010-06-22 09:53:25

标签: java

为什么以下产生0-9而不是10?

我的理解是Math.random()创建介于0到1.0之间的数字。

所以它可以产生0.99987,它变成10×10,不是吗?

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

8 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:14)

来自Math javadoc:

“伪随机双倍大于或等于0.0且小于1.0”

1.0不是Math.random的有效值。所以你不能获得10.而(int)9.999给出9

答案 2 :(得分:2)

原因(Math.random()* 10 使用 int()向上舍入,因此 int(9.9999999)会产生 9

答案 3 :(得分:1)

因为(int)向下舍入 (int)9.999导致9。 //整数截断

答案 4 :(得分:0)

  

0.99987,其变为10×10

不是我上学的时候。它变成了9.9987。

答案 5 :(得分:0)

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

现在你得到1到10之间的整数,包括数字10。

答案 6 :(得分:0)

您可以始终在命令末尾加上+1,允许它在生成的数字上加1。所以,你会有这样的事情:

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

这将产生1到10之间的任何整数。

如果你想要0到10之间的任何整数,你可以这样做:

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

希望这有帮助!

答案 7 :(得分:0)

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

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