【问题标题】:Why doesn't (int) Math.random()*10 produce 10 in Java?为什么 (int) Math.random()*10 在 Java 中不产生 10?
【发布时间】:2010-06-22 09:53:24
【问题描述】:

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

我的理解是 Math.random() 创建 0 到 1.0 以下的数字。

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

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

【问题讨论】:

标签: java


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    来自数学 javadoc:

    "大于等于 0.0 且小于 1.0 的伪随机双精度数"

    1.0 不是 Math.random 的可能值。所以你不能得到 10。并且 (int) 9.999 给出 9

    【讨论】:

      【解决方案3】:

      因为 (Math.random()* 10 使用 int() 向下舍入,所以 int(9.9999999) 产生 9.

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 有一个错字,(int)0.999 结果为0
        【解决方案5】:

        0.99987 由 *10 变为 10

        我上学的时候没有。它变成了 9.9987。

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

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

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

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

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

            希望这会有所帮助!

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

                猜你喜欢
                • 2012-03-16
                • 2016-04-18
                • 1970-01-01
                • 2021-12-30
                • 2013-08-20
                • 1970-01-01
                • 2018-12-24
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多