Math.random和小数

时间:2017-04-16 17:16:56

标签: java random

我真的很想了解,请求帮助。 我一直在看Derek Banas Java Programming视频,我坚持这个:

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

目标是获得1到126之间的随机数。 它有效,但为什么?怎么输出126?

  • 如果输出int drop decimals。

      

    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;
  6. 有人可以向我解释为什么我错了。

    测试:

    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   三十   101   77   101   85   87   6   89   26   20   115   108   13   53   三十   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   三十   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   三十   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   五   17   50   115   115   71   67   83   15   99   77   101   20   79   22   25   三十   108   46   75   89   80   103   51   61   15   91   9   61   90   11   五   27   36   116   15   14   105   五   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   126included125

2 个答案:

答案 0 :(得分:2)

Math#random州的文档

  

返回带有正号的double值,大于或等于0.0且小于1.0。返回值是伪随机选择的,具有来自该范围的(近似)均匀分布。

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

(0.9920634920634921 * 126) + 1
125 + 1
126

答案 1 :(得分:1)

事情是Math.random()不返回0.99但它返回0.999999999

0.99999999 * 125 = 125.9999874

125.9999874 + 1 = 126.9999874

int randomNumber =(int)126.9999874;

int randomNumber = 126;