【问题标题】:Math.random and decimalsMath.random 和小数
【发布时间】:2017-04-16 17:16:56
【问题描述】:

我真的很想了解,谢谢帮助。 我一直在观看 Derek Banas Java 编程视频,但我一直坚持:

int randomNumber = (int) (Math.random() * 126) + 1;

目标是获得一个包含 1 到 126 的随机数。 它有效,但为什么?怎么能输出126?

  • 如果转换为 int 则丢弃小数。

    126included125(见测试)

  • 如果 Math.random() 返回 0 - 0.9(含)。

最近的应该是:

  1. int randomNumber = (int) (Math.random() * 126) + 1;
  2. int randomNumber = (int) (0.99 * 126) + 1;
  3. int randomNumber = (int) (124.74) + 1;
  4. int randomNumber = (int) 125.74;
  5. int randomNumber = 125;

谁能给我解释一下为什么我错了。

测试:

import java.util.*;

public class Random_Number_Test 
{
    public static void main(String[] args) 
    {
        boolean Program_On_Going = true;
        double RoundTest = 125.74;

        while(Program_On_Going)
        {
            int randomNumber = (int) (Math.random() * 126) + 1;

            if(randomNumber == 126)
            {
                System.out.print(randomNumber);
                System.out.print("included");
                Program_On_Going = false;

                System.out.print((int) RoundTest);
            }
            else
            {
                System.out.println(randomNumber);
            }
        }
    }
}

结果

18 30 101 77 101 85 87 6 89 26 20 115 108 13 53 30 85 108 41 110 22 3 38 106 46 102 117 95 36 44 65 87 87 4 114 70 8 120 50 28 60 97 101 25 30 96 4 105 55 29 20 77 105 91 19 81 105 66 1 78 81 48 77 82 11 68 113 1 7 90 104 96 100 70 114 14 125 42 108 16 119 103 70 84 83 42 15 102 45 69 80 123 56 39 115 88 70 111 30 68 19 34 17 24 71 107 81 76 42 80 123 19 54 47 96 58 64 52 61 117 64 103 47 40 60 35 23 90 75 91 29 16 7 15 20 50 85 72 109 85 108 47 54 79 91 102 84 101 5 17 50 115 115 71 67 83 15 99 77 101 20 79 22 25 30 108 46 75 89 80 103 51 61 15 91 9 61 90 11 5 27 36 116 15 14 105 5 95 53 97 55 59 1 81 97 109 77 37 3 84 115 87 15 40 93 61 68 14 93 15 38 55 15 72 48 103 75 42 63 64 61 114 103 17 47 31 102 56 57 113 82 85 48 1 120 117 25 77 101 19 84 54 101 102 2 14 114 105 20 57 70 94 7 27 123 108 109 47 4 28 72 49 86 84 64 86 71 69 33 110 109 19 71 92 49 50 77 29 31 55 62 75 61 8 52 115 69 39 71 107 42 57 92 88 56 88 89 7 123 49 13 107 6 99 21 29 49 3 82 60 104 70 123 91 4 14 57 63 27 126包括125

【问题讨论】:

  • 您的随机链接是关于 javascript,而不是 java。
  • Math.random() 生成一个介于 0.0 - 0.9 之间的数字。 “1”不是由 Math.random() 生成的。
  • 您的输出包括“126included125”。而125 + 1126(这就是它被包括在内的原因)。
  • 它无法达到 125 原因 .99 * 126 = 124.74
  • @Mark 它不会停在.99。例如,你可以得到0.9920634920634921,它确实给出了 125

标签: java random


【解决方案1】:

Math#random 状态的文档

返回一个带正号的双精度值,大于或等于 0.0 且小于 1.0。返回值是伪随机选择的,从该范围(近似)均匀分布。

因此,返回的值最多可以有16 小数位。您的案例的一个示例是

(0.9920634920634921 * 126) + 1
125 + 1
126

【讨论】:

  • 好吧,这就是为什么,我认为这是结果永远无法达到值但可以非常接近的情况之一。谢谢。我应该修改我的数学。
  • 是结果永远达不到值的情况,值是126不是125。再次感谢
【解决方案2】:

问题是 Math.random() 不仅返回 0.99,而且返回 0.999999999

0.99999999 * 125 = 125.9999874

125.9999874 + 1 = 126.9999874

int randomNumber = (int) 126.9999874;

int randomNumber = 126;

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2015-09-24
    • 1970-01-01
    • 2010-12-03
    • 2015-08-13
    相关资源
    最近更新 更多